一、定义
JSP303是Java为bean数据合法性校验提供的标准框架,已经包含在JavaEE6.0中,JSR303是通过在Bean的属性上面注解类型于@Null,@NotNull,@Max等标准的注解指定校验规则,并通过标准的接口对bean的属性进行验证。
常用注解(注意在方法入参前加注解 @Valid)
序号 | 注解 | 说名 |
---|---|---|
1 | @Null | 被注解的属性必须为NULL |
2 | @NotNull | 被注解的属性不能为空 |
3 | @Past | 被注解的属性必须是一个过去的日期 |
4 | @Future | 被注解的属性必须是一个未来的日期 |
5 | @Pattern | 被注解的属性必须满足正则表达式 |
6 | @Max | 被注解的属性不能大于指定的最大值 |
7 | @Min | 被注解的属性不能小于指定的最小值 |
private Integer empId;
@NotNull
private String empName;
private String empMail;
private Integer empGender;
private Integer deptId;
private Dept dept;
@RequestMapping(value="emp",method=RequestMethod.POST)
//校验失败的信息都会绑定到BindingResult中,BindingResult对象可以作为处理器目标方法的入参。
public String insertEmp(@Valid Emp emp,BindingResult result) {
System.out.println(emp);
//this.empManagerSerivce.insertEmp(emp);
if(result.getErrorCount() > 0) { //如果错误数量大于0
List<FieldError > errors = result.getFieldErrors();//获取所有的错误信息
for (FieldError error : errors) {
System.out.println(error.getField() +"-----"+error.getDefaultMessage());
}
}
return "redirect:/emps";
}
结果:当前端传来的数据中empName为null时,控制台打印错误。
二、Hibernate Valiidator扩展注解
是JSR303的一个参考的实现,并且除了支持基本的校验注解外,还进行了扩展:
- @Email:必须符合电子邮箱格式
- @Length:字符串长度必须在指定范围内
- @NotEmpty:必须非空
- @Range:必须在指定的返回内
需要加入Jar包:
classmate-0.8.0.jar
hibernate-validator-5.0.0.CR2.jar
hibernate-validator-annotation-processor-5.0.0.CR2.jar
jboss-logging-3.1.1.GA.jar
validation-api-1.1.0.CR1.jar
@NotEmpty
private String empName;
@Email
private String empMail;
private Integer empGender;
private Integer deptId;
private Dept dept;
@Range(min=1000,max=9000)
@NumberFormat(pattern="#,###,###,###.#")
private Double salary;
@Past
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date birthday;