JSR 303 是什麼?
JSR-303 是 Java EE 6 中的一項子規範,叫做 Bean Validation,官方參考實現是hibernate Validator。
JSR 303 能做什麼?
1.JSR 303 用於對java Bean 中的字段的值進行驗證,使得基本的驗證邏輯可以從業務代碼中脫離出來。
2.是一個運行時的數據驗證框架,在驗證之後驗證的錯誤信息會被馬上返回。
都有些什麼驗證?
hibernate Validator對JSR303做了比較全面的實現,並且還額外提供了一些實現,如下:
Constraint | 詳細信息 | 作用類型 |
---|---|---|
@Null | 被註釋的元素必須爲 null | 引用類型 |
@NotNull | 被註釋的元素必須不爲 null | 引用類型 |
@AssertTrue | 被註釋的元素必須爲 true | boolean |
@AssertFalse | 被註釋的元素必須爲 false | boolean |
@Min(value) | 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值 | byte、short、int、long及對應的包裝類型以及BigDecimal、BigInteger |
@Max(value) | 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值 | byte、short、int、long及對應的包裝類型以及BigDecimal、BigInteger |
@DecimalMin(value) | 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值 | byte、short、int、long及對應的包裝類型以及BigDecimal、BigInteger、String |
@DecimalMax(value) | 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值 | byte、short、int、long及對應的包裝類型以及BigDecimal、BigInteger、String |
@Size(max, min) | 被註釋的元素的大小必須在指定的範圍內 | String、Collection、Map和數組 |
@Digits (integer, fraction) | 被註釋的元素必須是一個數字,其值必須在可接受的範圍內 | byte、short、int、long及各自的包裝類型以及BigDecimal、BigInteger、String |
@Past | 被註釋的元素必須是一個過去的日期 | java.util.Date,java.util.Calendar |
@Future | 被註釋的元素必須是一個將來的日期 | java.util.Date,java.util.Calendar |
@Pattern(regex=) | 被註釋的元素必須符合指定的正則表達式 | String |
@Valid | 被註釋的元素需要遞歸驗證 | 引用對象 |
以下是hibernate Validator新增的 | ||
被註釋的元素必須是電子郵箱地址 | String | |
@Length(min=下限, max=上限) | 被註釋的字符串的大小必須在指定的範圍內 | String |
@NotEmpty | 被註釋的元素的必須非空並且size大於0 | String、Collection、Map和數組 |
@NotBlank | 被註釋的元素必須不爲空且不能全部爲’ '(空字符串) | String |
@Range(min=最小值, max=最大值) | 被註釋的元素必須在合適的範圍內 | byte、short、int、long及各自的包裝類型以及BigDecimal、BigInteger、String |
注意:@Valid 和 BindingResult 是一一對應的,如果有多個@Valid,那麼每個@Valid後面跟着的BindingResult就是這個@Valid的驗證結果,順序不能亂
需要的依賴
<!--jsr 303-->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.1.0.Final</version>
</dependency>
<!-- hibernate validator-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.0.Final</version>
</dependency>
注意:springboot中已經自動集成了hibernate-validation 的依賴。
總結
jsr303讓代碼變得更簡潔、更清晰,使開發人員在定義數據模型時不必考慮實現框架的限制。當然 Bean Validation 不止提供了一些最基本的 constraint,還可以自定義驗證規則,在實際的開發過程中,用戶可以根據自己的需要組合或開發出更加合適的 constraint