天天看點

@Validated與@Valid的差別(JSR-303方法文檔使用說明)

介紹一下JSR-303常用的方法

@NotNull                               注解元素必須是非空

@Null                                    注解元素必須是空

@Digits                                 驗證數字構成是否合法

@Future                               驗證是否在目前系統時間之後

@Past                                  驗證是否在目前系統時間之前

@Max                                  驗證值是否小于等于最大指定整數值

@Min                                     驗證值是否大于等于最小指定整數值

@Pattern                               驗證字元串是否比對指定的正規表達式

@Size                                    驗證元素大小是否在指定範圍内

@DecimalMax                        驗證值是否小于等于最大指定小數值

@DecimalMin                          驗證值是否大于等于最小指定小數值

@AssertTrue                           被注釋的元素必須為true

@AssertFalse                            被注釋的元素必須為false                             

@Email                                     被注釋的元素必須是電子郵箱位址

@Length                                   被注釋的字元串的大小必須在指定的範圍内

@NotEmpty                               被注釋的字元串的必須非空

@Range                                    被注釋的元素必須在合适的範圍内

@Validated與@Valid的差別

Spring Validation驗證架構對參數的驗證機制提供了@Validated(Spring’s JSR-303規範,是标準JSR-303的一個變種),javax提供了@Valid(标準JSR-303規範),配合BindingResult可以直接提供參數驗證結果。

在檢驗Controller的入參是否符合規範時,使用@Validated或者@Valid在基本驗證功能上沒有太多差別。但是在分組、注解地方、嵌套驗證等功能上兩個有所不同:

  1. 分組:
  • @Validated:提供了一個分組功能,可以在入參驗證時,根據不同的分組采用不同的驗證機制
  • @Valid:作為标準JSR-303規範,還沒有吸收分組的功能。
  • 需要兩個接口,比如一個接口叫AddPerson,另一個叫UpdatePerson,接口什麼都不需要空的就可以,用來做分組用。
  • @Validated與@Valid的差別(JSR-303方法文檔使用說明)
  1. 注解地方:
  • @Validated:可以用在類、方法和方法參數上。
  • @Valid:可以用在方法、構造函數、方法參數和成員屬性(字段)上
  1. 嵌套驗證:
  • 嵌套驗證就是類嵌套類的驗證,比如我要在集合上加一個@notnull的注解,要求該集合中的每一個對象都被驗證,如果隻用@Validated與@Valid是不會驗證的。我們要用@Validated配合@Valid來進行驗證。
@Validated與@Valid的差別(JSR-303方法文檔使用說明)

例如我想讓props中的每一個元素都按照我規定的JSR-303校驗進行驗證。

那麼我在controller中不管用@Validated還是@Valid都是不能驗證的。

@Validated與@Valid的差別(JSR-303方法文檔使用說明)

隻需要我在前面加上@Validated注解

@Validated與@Valid的差別(JSR-303方法文檔使用說明)

然後把@Valid放到需要驗證的集合上就可以了。