1. 程式人生 > 程式設計 >引數校驗 Hibernate-Validator

引數校驗 Hibernate-Validator

需求

在 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不起作用

相關文章

Spring 引數校驗詳解