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<T> implements List<@Valid T> { ... } //使用 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 長度是否符合要求。
class Man{ @Valid @Size(min = 1) private List<House> houses; } class House{ @Length(min = 1,max = 10) private String name; }