SpringBoot使用@NotEmpty、@NotBlank、@NotNull注解進(jìn)行參數(shù)校驗(yàn)
在 Spring Boot 項(xiàng)目中,我們經(jīng)常需要對(duì)請(qǐng)求參數(shù)進(jìn)行校驗(yàn),以確保其符合預(yù)期的格式和內(nèi)容。Spring 提供了一些注解來(lái)簡(jiǎn)化參數(shù)校驗(yàn)的工作,其中包括 @NotEmpty
、@NotBlank
和 @NotNull
。在本文中,我們將學(xué)習(xí)如何使用這些注解來(lái)進(jìn)行參數(shù)校驗(yàn),并解釋為什么要使用它們。
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ù)校驗(yàn)功能所需的依賴。
2. 使用 @NotEmpty、@NotBlank、@NotNull
@NotEmpty
:用于檢查集合或數(shù)組等對(duì)象是否為null
或空。該注解通常用于檢查字符串是否為空,集合是否為空等情況。@NotBlank
:用于檢查字符串是否不為空,并且去除首尾空格后長(zhǎng)度大于 0。該注解通常用于檢查用戶輸入的字符串是否為有效值。@NotNull
:用于檢查對(duì)象(包裝類:Integer、Boolean等)是否不為null
。該注解通常用于檢查對(duì)象是否已經(jīng)被初始化。
3. 增加 @Validated 注解
為了讓參數(shù)校驗(yàn)注解生效,我們需要在 Controller 或 Service 類上添加 @Validated
注解。
4. 示例
假設(shè)我們有一個(gè)簡(jiǎn)單的 Controller 處理器,用于接收用戶的注冊(cè)請(qǐng)求,并需要對(duì)用戶名和密碼進(jìn)行校驗(yàn):
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) { // 處理用戶注冊(cè)邏輯 return "User registered successfully!"; } public static class UserDTO { @NotBlank(message = "用戶名不能為空") private String username; @NotBlank(message = "密碼不能為空") private String password; // 省略 getter 和 setter 方法 } }
在上面的示例中,我們定義了一個(gè) UserDTO
類用于接收用戶注冊(cè)的請(qǐng)求參數(shù)。通過在 username
和 password
字段上添加 @NotBlank
注解,我們要求這兩個(gè)字段不能為空,并且不允許只包含空格。同時(shí),在 UserController
類上添加了 @Validated
注解,以確保參數(shù)校驗(yàn)生效。
5. 為什么使用 @NotEmpty、@NotBlank、@NotNull
- 提高代碼健壯性:通過對(duì)參數(shù)進(jìn)行校驗(yàn),可以有效地防止空指針異?;驘o(wú)效輸入帶來(lái)的問題,提高系統(tǒng)的穩(wěn)定性和安全性。
- 提升開發(fā)效率:使用這些注解可以減少手動(dòng)編寫參數(shù)校驗(yàn)邏輯的工作量,提高開發(fā)效率,同時(shí)使代碼更加清晰易讀。
- 統(tǒng)一規(guī)范:采用注解方式進(jìn)行參數(shù)校驗(yàn)可以使代碼規(guī)范化,降低維護(hù)成本,并且有利于團(tuán)隊(duì)間的協(xié)作與交流。
6.全局異常處理器
在 Spring Boot 中,如果參數(shù)校驗(yàn)失敗,將會(huì)拋出 MethodArgumentNotValidException
異?;?nbsp;ConstraintViolationException
異常。為了統(tǒng)一處理這些異常,可以定義一個(gè)全局異常處理器。
下面是一個(gè)簡(jiǎn)單的全局異常處理器示例:
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ù)校驗(yàn)異常 MethodArgumentNotValidException
,并返回一個(gè)包含錯(cuò)誤信息的 ResponseEntity
對(duì)象。
通過定義全局異常處理器,可以集中處理所有控制器中拋出的參數(shù)校驗(yàn)異常,并向客戶端返回統(tǒng)一的錯(cuò)誤信息,提高了代碼的可維護(hù)性和可重用性。
總結(jié)
在 Spring Boot 中使用參數(shù)校驗(yàn)注解可以方便地對(duì)用戶傳入的參數(shù)進(jìn)行校驗(yàn),保證數(shù)據(jù)的有效性和安全性。同時(shí),通過定義全局異常處理器,可以統(tǒng)一處理所有的參數(shù)校驗(yàn)異常,提高了代碼的健壯性和可維護(hù)性。
到此這篇關(guān)于SpringBoot使用@NotEmpty、@NotBlank、@NotNull注解進(jìn)行參數(shù)校驗(yàn)的文章就介紹到這了,更多相關(guān)SpringBoot注解參數(shù)校驗(yàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
maven如何在tomcat8中實(shí)現(xiàn)自動(dòng)部署
本篇文章主要介紹了maven如何在tomcat8中實(shí)現(xiàn)自動(dòng)部署,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-10-10spring整合shiro框架的實(shí)現(xiàn)步驟記錄
Shiro是一個(gè)強(qiáng)大易用的Java安全框架,提供了認(rèn)證、授權(quán)、加密和會(huì)話管理等功能。下面這篇文章主要給大家介紹了關(guān)于spring整合shiro框架的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-05-05Java實(shí)現(xiàn)XML格式與JSON格式互相轉(zhuǎn)換的方法
這篇文章主要介紹了Java實(shí)現(xiàn)XML格式與JSON格式互相轉(zhuǎn)換的方法,方法通過實(shí)例代碼給大家介紹的非常詳細(xì),選擇使用哪種格式通常取決于項(xiàng)目的需求和上下文,所以格式轉(zhuǎn)換就成了我們必備的技能,具體實(shí)現(xiàn)代碼跟隨小編一起看看吧2023-10-10詳解利用SpringCloud搭建一個(gè)最簡(jiǎn)單的微服務(wù)框架
這篇文章主要介紹了詳解利用SpringCloud搭建一個(gè)最簡(jiǎn)單的微服務(wù)框架,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-11-11java實(shí)現(xiàn)微信公眾平臺(tái)發(fā)送模板消息的示例代碼
這篇文章主要介紹了java實(shí)現(xiàn)微信公眾平臺(tái)發(fā)送模板消息的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09