引數校驗 Hibernate-Validator
阿新 • • 發佈:2019-12-31
需求
在 RESTful 的介面服務中,會有各種各樣的入參,我們不可能完全不做任何校驗就直接進入到業務處理的環節,通常我們會有一個基礎的資料驗證的機制,待這些驗證過程完畢,結果無誤後,引數才會進入到正式的業務處理中。
而資料驗證又分為兩種
- 一種是無業務關聯的規則性驗證
- 一種是根據現有資料進行的聯動性資料驗證(簡單來說,引數的合理性,需要查資料庫,比如使用者名稱不能重複)
第二中只能一般只能在業務中校驗,但第一種可以通過 Hibernate-Validator 來做無業務關聯的規則性驗證。
Hibernate-Validator的主要使用的方式就是註解的形式,並且是“零配置”的,無需配置也可以使用。
匯入依賴
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.17.Final</version>
</dependency>
複製程式碼
如果專案的框架是 spring boot 的話,在 spring-boot-starter-web 中已經包含了 Hibernate-validator 的依賴。
依賴關係
註解
javax.validation.constraints 的註解和 org.hibernate.validator.constraints 的註解可以混用
來自 javax.validation.constraints 的註解
import javax.validation.constraints.*;
//被註釋的元素,值必須是一個字串,不能為null,且呼叫trim()後,長度必須大於0
@NotBlank(message = "")
//被註釋的元素,值不能為null,但可以為"空",用於基本資料型別的非空校驗上,而且被其標註的欄位可以使用 @size、@Max、@Min 等對欄位數值進行大小的控制
@NotNull(message = "" )
//被註釋的的元素,值不能為null,且長度必須大於0,一般用在集合類上面
@NotEmpty(message = "")
//被註釋的元素必須符合指定的正則表示式。
@Pattern(regexp = "",message = "")
//被註釋的元素的大小必須在指定的範圍內。
@Size(min =,max =)
//被註釋的元素,值必須是一個數字,且值必須大於等於指定的最小值
@Min(value = long以內的值,message = "")
//被註釋的元素,值必須是一個數字,且值必須小於等於指定的最大值
@Max(value = long以內的值,message = "")
//被註釋的元素,值必須是一個數字,其值必須大於等於指定的最小值
@DecimalMin(value = 可以是小數,message = "")
//被註釋的元素,值必須是一個數字,其值必須小於等於指定的最大值
@DecimalMax(value = 可以是小數,message = "")
//被註釋的元素,值必須為null
@Null(message = "")
//被註釋的元素必須是一個數字,其值必須在可接受的範圍內
@Digits(integer =,fraction =)
//被註釋的元素,值必須為true
@AssertTrue(message = "")
//被註釋的元素,值必須為false
@AssertFalse(message = "")
//被註釋的元素必須是一個過去的日期
@Past(message = "")
//被註釋的元素必須是一個將來的日期
@Future(message = "")
//被註釋的元素必須是電子郵件地址
@Email(regexp = "",message = "")
複製程式碼
來自 org.hibernate.validator.constraints 的註解
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;
//被註釋的元素必須在合適的範圍內
@Range(min =,max =,message = "")
//被註釋的字串的大小必須在指定的範圍內
@Length(min =,message = "")
複製程式碼
@NotBlank、@NotNull、@NotEmpty 的區別
- @NotBlank:用於字串上,值不能為null,且呼叫trim()後,長度必須大於0
- @NotNull:用於基本型別及封裝型別上,值不能為null
- @NotEmpty:用於集合類上,且集合長度必須大於0
示例
import lombok.Data;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
@Data
public class RegisterDTO {
@NotBlank(message = "使用者名稱不能為空")
private String userName;
@NotBlank(message = "密碼不能為空")
private String password;
@NotBlank(message = "真實姓名不能為空")
private String realName;
@Range(min = 0,max = 99,message = "年齡應該在0到99之間")
private Integer age;
@Pattern(regexp = "男|女",message = "必須是男或女")
private String sex;
@Pattern(regexp = "\\d{3}-\\d{8}|\\d{4}-\\d{7}|\\d{11}",message = "號碼不正確")
private String telephone;
}
複製程式碼
注意使用@NotBlank等註解時,一定要和@valid一起使用,不然@NotBlank不起作用