1、Validator参数
@Null:被注解元素必须为null(为了节省篇幅下面用“元素”代表“被注解元素必须为”)
@NotNull:元素不为null
@AssertTrue:元素为true
@AssertFalse:元素为false
@Min(value):元素大于或等于指定值
@Max(value):元素小于或等于指定值
@DecimalMin(value):元素大于指定值
@DecimalMax(value):元素小于指定值
@Size(max,min):元素大小在给定范围内
@Digits(integer,fraction):元素字符串中的整数位数规定最大integer位,小数位数规定最大fraction位
@Past:元素是一个过去日期
@Future:元素是将来日期
@Pattern:元素需要符合正则表达式
@Eamil:元素为邮箱
@Length:字符串大小在指定范围内
@NotEmpty:字符串必须非空(目前最新的6.1.5版本已弃用,建议使用标准的@NotEmpty)
@Range:数字在指定范围内
2、@NotNull或@NotBlank的区别
对于String来说有时候会使用@NotNull或@NotBlank,它们的区别如下:
@NotEmpty:不能为null并且长度必须大于0,除了String外,对于Collection/Map/数组也适用
@NotBlank:只用于String,不能为null,并且调用trim()后,长度必须大于0,也就是必须有除空格外的实际字符
@NotNull:不能为null
3、校验模式设置
Hibernate Validator有两种校验模式:
普通模式:默认模式,会校验所有属性,然后返回所有的验证失败信息
快速失败模式:只要有一个验证失败就返回
使用快速失败模式需要通过HibernateValidateConfiguration以及ValidateFactory创建Validator,并且使用Validator.validate()进行手动验证。
4、@Valid与@Validated
@Valid是javax.validation包里面的,而@Validated是org.springframework.validation.annotation里面的,是@Valid的一次封装,相当于是@Valid的增强版,供Spring提供的校验机制使用,相比起@Valid,@Validated提供了分组以及组序列的功能。
5、分组
当需要在不同的情况下使用不同的校验方式时,可以使用分组校验。比如在注册时不需要校验id,修改信息时需要校验id,但是默认的校验方式在两种情况下全部都校验,这时就需要使用分组校验。
6、组序列
默认情况下,不同组别的约束验证的无序的。
有些时候顺序并不重要,而有些时候顺序很重要,比如:第二个组中的约束验证依赖于一个稳定状态运行,而这个稳定状态由第一个组来进行验证某个组的验证比较耗时,CPU和内存的使用率相对较大,最优的选择是将其放在最后进行验证。因此在进行组验证的时候需要提供一种有序的验证方式,一个组可以定义为其他组的序列,这样就可以固定每次验证的顺序而不是随机顺序,另外如果验证组序列中,前面的组验证失败,则后面的组不会验证。
7、自定义校验
尽管Hibernate Validator中的注解适用情况很广了,但是有时候需要特定的校验规则,比如密码强度,人为判定弱密码还是强密码。也就是说,此时需要添加自定义校验的方式,有两种处理方法:
- 自定义注解
- 自定义Validator