@Valid 跟@Validated 差不多 不分组
@Validated
1.创建分组接口
interfaceValidationStepOne{
// validation group marker interface
}
2.定义验证限制
@NotBlank(groups={ValidationStepOne.class})
privateString username;
3.controller中使用@Validated进行验证
默认的情况下,不同的分组约束验证是无序的,但是在有些情况下验证的相互约束很重要(比如前一个组验证失败,后面的将不再验证等情况),所以groups分组的验证也有前后验证顺序。使用@GroupSequence注解进行排序。
public String stepOne(@Validated(ValidationStepOne.class) Account account)
@GroupSequence({First.class,Second.class})
public interface Group{
}
注意点:
定义验证限制的地方如果group不写就是Default.class,也是一个接口。所以如果只在一个字段上指定了自定义的group(Gp.class),并且在验证参数的时候(无论用spring注解还是不用spring)只指定了Gp,没有Default,那除了Gp标注的字段,其它的都不会被验证。
可以用Gp继承Default
常用注解
@Null
限制只能为null
@NotNull
限制必须不为null
@AssertFalse
限制必须为false
@AssertTrue
限制必须为true
@DecimalMax(value)
限制必须为一个不大于指定值的数字
@DecimalMin(value)
限制必须为一个不小于指定值的数字
@Digits(integer,fraction)
限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future
限制必须是一个将来的日期
@Max(value)
限制必须为一个不大于指定值的数字
@Min(value)
限制必须为一个不小于指定值的数字
@Past
限制必须是一个过去的日期
@Pattern(value)
限制必须符合指定的正则表达式
@Size(max,min)
限制字符长度必须在min到max之间
@Past
验证注解的元素值(日期类型)比当前时间早
@NotEmpty
验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank
验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式
注意,不要错用了异常类型,比如在int上不可用@size