1.因为是在maven项目下,需要引入如下三个包
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.3.5.Final</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.3.1.Final</version>
</dependency>
2.springmvc的配置文件中,只需要写一句话
<mvc:annotation-driven/>
不需要再添加了。
3.Pojo中添加一些注解,比如@Past所选时间不能是将来的。
@Past
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date becomeStudent;
@NotNull
private String username;
4.在控制层里的方法里要对加以判断的方法参数前面加上@Valid,而且方法里一定要有Error对象,那么它的子集BindingResult也是可以的:
@RequestMapping(value = "/add.do",method = RequestMethod.POST)
public String add(@Valid Student student, BindingResult result,Model model, ModelMap modelMap){
if(result.getErrorCount()>0){
for(FieldError error : result.getFieldErrors()){
log.info(error.getField()+" "+error.getDefaultMessage() );
}
}
model.addAttribute(student);
modelMap.put("stu",student);
log.info(student.toString());
return "listStudent";
}
一定要写在@Valid后面,有几个待验证的参就出现几次BindResult.
JSR303的验证类型:
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max, min) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(value) 被注释的元素必须符合指定的正则表达式
//-----------------下面是hibernate-valitor新增加的
@Email 被注释的元素必须是电子邮箱地址
@Length 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range 被注释的元素必须在合适的范围内