1. 参数校验常用注解
注解
验证的数据类型
备注
Null
任意类型
参数值必须是 Null
NotNull
任意类型
参数值必须不是 Null
NotBlank
只能作用于字符串
字符串不能为 null,而且字符串长度必须大于0,至少包含一个非空字符串
NotEmpty
CharSequence
Collection
Map
Array
字符串:字符串长度必须大于0,空字符串(“ ”)可以通过校验;
Collection:集合大小必须大于0;
Map:map的大小必须大于0;
Array:数组长度必须大于0;
Size
CharSequence
Collection
Map
Array
同 NotEmpty
Range
数字类型
字符串类型
数值或者字符串的值必须在 min 和 max 指定的范围内
Length
字符串类型
字符串的长度在min 和 max 之间
Pattern
字符串类型
验证字符串是否符合正则表达式
Min
整型类型
参数值必须大于等于 最小值
Max
整型类型
参数值必须小于等于 最大值
DecimalMin
整型类型
参数值必须大于等于 最小值
DecimalMax
整型类型
参数值必须小于等于 最大值
AssertTrue
布尔类型
参数值必须为 true
AssertFalse
布尔类型
参数值必须为 false
Past
时间类型
参数值必须小于 当前时间
Future
时间类型
参数值必须大于 当前时间
2. @Validated 和 @Valid
2.1 相同点
在检验参数符合规范的功能上基本一致;
2.2 不同点
2.2.1 提供者
validated 是Spring Validation验证框架对参数的验证机制;
valid是 javax 提供的参数验证机制
2.2.2 作用域
validated :类,方法,参数
valid:方法, 字段, 构造方法, 参数, TYPE_USE;
TYPE_USE:
在 Java 8 之前的版本中,只能允许在声明式前使用Annotation。而在Java 8版本中,Annotation可以被用在任何使用Type的地方,例如:初始化对象时(new),对象类型转化时,使用implements表达式时,或者使用throws表达式时。
//初始化对象时
String myString = new@Valid String();//对象类型转化时
myString =(@Valid String) str;//使用 implements 表达式时
class MyList implements List{
...
}//使用 throws 表达式时
public void validateValues() throws@Valid ValidationFailedException{
...
}
3. 嵌套检验
在被检验的字段上添加 @Valid 注解就可以实现嵌套检验
当对象 Man 的字段 houses 包含 House 对象类型时,在检验 houses 字段时可以检验 House 对象的属性字段时,就称为嵌套检验。
示例如下:
在检验 Man 对象的 houses 字段时,在houses 字段上添加 @Valid 注解后,就可以检验 list 中的 House 的属性是否符合要求;
否则只会检验 houses 的集合大小是否大于1,不会校验集合中的 House 对象,比如 House 对象的 name 长度是否符合要求。
classMan{
@Valid
@Size(min= 1)private Listhouses;
}classHouse{
@Length(min= 1,max = 10)privateString name;
}