Hibernate Validator校驗引數全攻略
阿新 • • 發佈:2020-07-31
![](https://img2020.cnblogs.com/other/1739473/202007/1739473-20200731090406573-118260273.png)
## 1. 前言
資料欄位一般都要遵循業務要求和資料庫設計,所以後端的引數校驗是必須的,應用程式必須通過某種手段來確保輸入進來的資料從語義上來講是正確的。
## 2. 資料校驗的痛點
為了保證資料語義的正確,我們需要進行大量的判斷來處理驗證邏輯。而且專案的分層也會造成一些重複的校驗,產生大量與業務無關的程式碼。不利於程式碼的維護,增加了開發人員的工作量。
## 3. JSR 303校驗規範及其實現
為了解決上面的痛點,將驗證邏輯與相應的領域模型進行繫結是十分有必要的。為此產生了[JSR 303 – Bean Validation 規範](http://jcp.org/en/jsr/detail?id=303)。[Hibernate Validator]() 是**JSR-303**的參考實現,它提供了**JSR 303**規範中所有的約束(constraint)的實現,同時也增加了一些擴充套件。
### Hibernate Validator 提供的常用的約束註解
| **約束註解** | **詳細資訊** |
| :---------------------------- | :------------------------------------------------------- |
| `@Null` | 被註釋的元素必須為 `null` |
| `@NotNull` | 被註釋的元素必須不為 `null` |
| `@AssertTrue` | 被註釋的元素必須為 `true` |
| `@AssertFalse` | 被註釋的元素必須為 `false` |
| `@Min(value)` | 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值 |
| `@Max(value)` | 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值 |
| `@DecimalMin(value)` | 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值 |
| `@DecimalMax(value)` | 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值 |
| `@Size(max, min)` | 被註釋的元素的大小必須在指定的範圍內 |
| `@Digits (integer, fraction)` | 被註釋的元素必須是一個數字,其值必須在可接受的範圍內 |
| `@Past` | 被註釋的元素必須是一個過去的日期 |
| `@Future` | 被註釋的元素必須是一個將來的日期 |
| `@Pattern(value)` | 被註釋的元素必須符合指定的正則表示式 |
| `@Email` | 被註釋的元素必須是電子郵箱地址 |
| `@Length` | 被註釋的字串的大小必須在指定的範圍內 |
| `@NotEmpty` | 被註釋的字串的必須非空 |
| `@Range` | 被註釋的元素必須在合適的範圍內 |
## 4. 驗證註解的使用
在**Spring Boot**開發中使用**Hibernate Validator**是非常容易的,引入下面的**starter**就可以了:
```xml
```
一種可以實現介面來定製`Validator`,一種是使用約束註解。胖哥覺得註解可以滿足絕大部分的需求,所以建議使用註解來進行資料校驗。而且註解更加靈活,控制的粒度也更加細。接下來我們來學習如何使用註解進行資料校驗。
### 4.1 約束註解的基本使用
我們對需要校驗的方法入參進行註解約束標記,例子如下:
```java
@Data
public class Student {
@NotBlank(message = "姓名必須填")
private String name;
@NotNull(message = "年齡必須填寫")
@Range(min = 1,max =50, message = "年齡取值範圍1-50")
private Integer age;
@NotEmpty(message = "成績必填")
priv