Java 注解方式校驗請求參數


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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM