參數校驗 Hibernate-Validator

需求

在 RESTful 的接口服務中,會有各類各樣的入參,咱們不可能徹底不作任何校驗就直接進入到業務處理的環節,一般咱們會有一個基礎的數據驗證的機制,待這些驗證過程完畢,結果無誤後,參數纔會進入到正式的業務處理中。java

而數據驗證又分爲兩種git

  • 一種是無業務關聯的規則性驗證
  • 一種是根據現有數據進行的聯動性數據驗證(簡單來講,參數的合理性,須要查數據庫,好比用戶名不能重複)

第二中只能通常只能在業務中校驗,但第一種能夠經過 Hibernate-Validator 來作無業務關聯的規則性驗證。web

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 的依賴。 spring

依賴關係

註解

來自 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 的註解bash

import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;

//被註釋的元素必須在合適的範圍內
@Range(min =, max =, message = "")

//被註釋的字符串的大小必須在指定的範圍內
@Length(min =, max =, 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不起做用 框架

相關文章
相關標籤/搜索