springboot 通過注解校驗類中字段


1.引入maven依賴

如果是springboot項目,就可以不必引入,這個存在最核心的web開發包里

<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.5.RELEASE</version>
</dependency>

如果不是springboot項目,則需要引入如下依賴包

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>

 

2.DTO類添加注解

import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;

/**
* 用戶信息DTO
* @author htdd
*/
@Data
public class UserInfoDTO implements Serializable {

private static final long serialVersionUID = -1776650315673803884L;

/**
* 昵稱
*/
@NotNull(message = "姓名不能為空")
private String name;

/**
* 密碼
*/
@NotEmpty(message = "密碼不能為空")
private String pwd;

/**
* 手機號
*/
@NotBlank(message = "手機號不能為空")
private String phone;
}

 

3.三種非空校驗的區別

@NotNull 是校驗 json字符串中變量為null的 例:{"name":null} ← 校驗有效; 對json字符串中傳遞參數為 "" 這種校驗無效 例 :{"name":""} ← 校驗無效;對json字符串中校驗 " " 無效 例:{"name":" "} ← 校驗無效;

@NotEmpty 可以校驗null 和 "" 的情況,但是對 " "  ←(中間有個空格)就無效 例:{"name":null} ← 校驗有效;例 :{"name":""} ← 校驗有效;例:{"name":" "} ← 校驗無效;

@NotBlank 可以校驗以上三種情況  例:{"name":null} ← 校驗有效;例 :{"name":""} ← 校驗有效;例:{"name":" "} ← 校驗有效;

 

4.controller控制器中校驗

@PostMapping("test")
public JsonData test(@RequestBody @Valid UserInfoDTO userInfo, BindingResult result) throws Exception{
if (result.hasErrors()) {
    // 獲取報錯信息中的第一條數據
String message = result.getAllErrors().get(0).getDefaultMessage();
return JsonData.buildError(message);
}
return JsonData.buildSuccess("success");
}

這樣我們就只需要在DTOl字段上加上非空驗證和相應提示語就好了。注意 需要校驗的類前需要加入@Valid 注解 不然注解不生效。

 

5.常用的校驗注解

​javax.validation.constraints.NotNull
​@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  被注釋的元素必須在合適的范圍內

 

6.注解補充

@Valid 注解類型的使用:

@Null
限制只能為null

@NotNull
限制必須不為null

@AssertFalse
限制必須為false

@AssertTrue
限制必須為true

@DecimalMax(value)
限制必須為一個不大於指定值的數字

@DecimalMin(value)
限制必須為一個不小於指定值的數字

@Digits(integer,fraction)
限制必須為一個小數,且整數部分的位數不能超過integer,小數部分的位數不能超過fraction

@Future
限制必須是一個將來的日期

@Max(value)
限制必須為一個不大於指定值的數字

@Min(value)
限制必須為一個不小於指定值的數字

@Past
限制必須是一個過去的日期

@Pattern(value)
限制必須符合指定的正則表達式

@Size(max,min)
限制字符長度必須在min到max之間

@Past
驗證注解的元素值(日期類型)比當前時間早

@NotEmpty
驗證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0)

@NotBlank
驗證注解的元素值不為空(不為null、去除首位空格后長度為0),不同於@NotEmpty,@NotBlank只應用於字符串且在比較時會去除字符串的空格

@Email
驗證注解的元素值是Email,也可以通過正則表達式和flag指定自定義的email格式

 

7.扒圖小能手(來自別人的博客)

常用校驗注解圖片:

 

 

8.2022-01-05 補充

/**
* 手機號格式校驗
*/
@Pattern(regexp = "1[3|4|5|7|8][0-9]\\d{8}",message = "手機號格式不正確")
private String phone;
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM