SpringBoot使用@NotEmpty、@NotBlank、@NotNull注解進行參數(shù)校驗
在 Spring Boot 項目中,我們經(jīng)常需要對請求參數(shù)進行校驗,以確保其符合預(yù)期的格式和內(nèi)容。Spring 提供了一些注解來簡化參數(shù)校驗的工作,其中包括 @NotEmpty、@NotBlank 和 @NotNull。在本文中,我們將學(xué)習(xí)如何使用這些注解來進行參數(shù)校驗,并解釋為什么要使用它們。
1. 導(dǎo)入依賴
首先,在 pom.xml 文件中添加以下 Maven 依賴:
xmlCopy code
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
這將導(dǎo)入 Spring Boot 提供的參數(shù)校驗功能所需的依賴。
2. 使用 @NotEmpty、@NotBlank、@NotNull
@NotEmpty:用于檢查集合或數(shù)組等對象是否為null或空。該注解通常用于檢查字符串是否為空,集合是否為空等情況。@NotBlank:用于檢查字符串是否不為空,并且去除首尾空格后長度大于 0。該注解通常用于檢查用戶輸入的字符串是否為有效值。@NotNull:用于檢查對象(包裝類:Integer、Boolean等)是否不為null。該注解通常用于檢查對象是否已經(jīng)被初始化。
3. 增加 @Validated 注解
為了讓參數(shù)校驗注解生效,我們需要在 Controller 或 Service 類上添加 @Validated 注解。
4. 示例
假設(shè)我們有一個簡單的 Controller 處理器,用于接收用戶的注冊請求,并需要對用戶名和密碼進行校驗:
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Validated
public class UserController {
@PostMapping("/register")
public String registerUser(@Valid @RequestBody UserDTO userDTO) {
// 處理用戶注冊邏輯
return "User registered successfully!";
}
public static class UserDTO {
@NotBlank(message = "用戶名不能為空")
private String username;
@NotBlank(message = "密碼不能為空")
private String password;
// 省略 getter 和 setter 方法
}
}
在上面的示例中,我們定義了一個 UserDTO 類用于接收用戶注冊的請求參數(shù)。通過在 username 和 password 字段上添加 @NotBlank 注解,我們要求這兩個字段不能為空,并且不允許只包含空格。同時,在 UserController 類上添加了 @Validated 注解,以確保參數(shù)校驗生效。
5. 為什么使用 @NotEmpty、@NotBlank、@NotNull
- 提高代碼健壯性:通過對參數(shù)進行校驗,可以有效地防止空指針異?;驘o效輸入帶來的問題,提高系統(tǒng)的穩(wěn)定性和安全性。
- 提升開發(fā)效率:使用這些注解可以減少手動編寫參數(shù)校驗邏輯的工作量,提高開發(fā)效率,同時使代碼更加清晰易讀。
- 統(tǒng)一規(guī)范:采用注解方式進行參數(shù)校驗可以使代碼規(guī)范化,降低維護成本,并且有利于團隊間的協(xié)作與交流。
6.全局異常處理器
在 Spring Boot 中,如果參數(shù)校驗失敗,將會拋出 MethodArgumentNotValidException 異?;?nbsp;ConstraintViolationException 異常。為了統(tǒng)一處理這些異常,可以定義一個全局異常處理器。
下面是一個簡單的全局異常處理器示例:
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.MethodArgumentNotValidException;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<String> handleValidationExceptions(MethodArgumentNotValidException ex) {
return new ResponseEntity<>("Invalid request: " + ex.getMessage(), HttpStatus.BAD_REQUEST);
}
// 可以添加其他異常處理方法
}
在上面的示例中,handleValidationExceptions 方法用于處理參數(shù)校驗異常 MethodArgumentNotValidException,并返回一個包含錯誤信息的 ResponseEntity 對象。
通過定義全局異常處理器,可以集中處理所有控制器中拋出的參數(shù)校驗異常,并向客戶端返回統(tǒng)一的錯誤信息,提高了代碼的可維護性和可重用性。
總結(jié)
在 Spring Boot 中使用參數(shù)校驗注解可以方便地對用戶傳入的參數(shù)進行校驗,保證數(shù)據(jù)的有效性和安全性。同時,通過定義全局異常處理器,可以統(tǒng)一處理所有的參數(shù)校驗異常,提高了代碼的健壯性和可維護性。
到此這篇關(guān)于SpringBoot使用@NotEmpty、@NotBlank、@NotNull注解進行參數(shù)校驗的文章就介紹到這了,更多相關(guān)SpringBoot注解參數(shù)校驗內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Resty開發(fā)restful版本的Jfinal深入研究
這篇文章主要為大家介紹了Resty開發(fā)restful版本的Jfinal深入研究有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-03-03
java自定義ClassLoader加載指定的class文件操作
這篇文章主要介紹了java自定義ClassLoader加載指定的class文件操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Java中的NoClassDefFoundError報錯含義解析
這篇文章主要為大家介紹了Java中的NoClassDefFoundError含義詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2023-11-11
2020年IntelliJ IDEA最新最詳細配置圖文教程詳解
這篇文章主要介紹了2020年IntelliJ IDEA最新最詳細配置圖文教程詳解,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02
Spring?Boot中@Validated注解不生效問題匯總大全
這篇文章主要給大家介紹了關(guān)于Spring?Boot中@Validated注解不生效問題匯總的相關(guān)資料,@Validated注解是Spring框架中的一個注解,用于在方法參數(shù)上添加參數(shù)校驗規(guī)則,需要的朋友可以參考下2023-07-07
mybatis plus CU自動填充 和 軟刪除自動填充的實現(xiàn)方法
這篇文章主要介紹了mybatis plus CU自動填充 和 軟刪除自動填充的實現(xiàn)方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-07-07

