Spring?Boot常用的參數(shù)驗(yàn)證技巧和使用方法
簡(jiǎn)介
Spring Boot是一個(gè)使用Java編寫的開源框架,用于快速構(gòu)建基于Spring的應(yīng)用程序。在實(shí)際開發(fā)中,經(jīng)常需要對(duì)輸入?yún)?shù)進(jìn)行驗(yàn)證,以確保數(shù)據(jù)的完整性和準(zhǔn)確性。Spring Boot提供了多種方式來進(jìn)行參數(shù)驗(yàn)證,并且可以很方便地集成到應(yīng)用程序中。
1. 使用JSR-303注解進(jìn)行參數(shù)驗(yàn)證
JSR-303是Java Validation API的規(guī)范之一,它定義了一套用于參數(shù)驗(yàn)證的注解。Spring Boot支持使用這些注解來驗(yàn)證方法參數(shù)、請(qǐng)求參數(shù)和實(shí)體類字段等。
@RestController public class UserController { @PostMapping("/user") public ResponseEntity<String> createUser(@Valid @RequestBody UserRequest request) { // 處理請(qǐng)求 return ResponseEntity.ok("User created successfully"); } }
在上面的例子中, @Valid
注解用于標(biāo)記需要驗(yàn)證的參數(shù), @RequestBody
注解用于指定該參數(shù)為請(qǐng)求體。而 UserRequest
則是一個(gè)自定義的實(shí)體類,使用了JSR-303注解來驗(yàn)證字段。
public class UserRequest { @NotBlank(message = "用戶名不能為空") private String username; @Size(min = 6, max = 12, message = "密碼長(zhǎng)度必須在6到12個(gè)字符之間") private String password; // getter 和 setter 方法省略 }
在 UserRequest
類中,我們使用了 @NotBlank
注解來驗(yàn)證 username
字段不能為空,使用了 @Size
注解來驗(yàn)證 password
字段的長(zhǎng)度在6到12個(gè)字符之間。當(dāng)參數(shù)驗(yàn)證失敗時(shí),框架會(huì)自動(dòng)拋出 MethodArgumentNotValidException
異常,并返回相應(yīng)的錯(cuò)誤信息。
2. 使用自定義驗(yàn)證器
除了使用JSR-303注解外,你還可以編寫自己的參數(shù)驗(yàn)證器。這對(duì)于一些特殊的驗(yàn)證需求,或者需要復(fù)雜邏輯的驗(yàn)證場(chǎng)景非常有用。
@Component public class AgeValidator implements ConstraintValidator<ValidAge, Integer> { @Override public boolean isValid(Integer age, ConstraintValidatorContext context) { // 實(shí)現(xiàn)自定義的驗(yàn)證邏輯 return age >= 18 && age <= 60; } }
首先,我們需要編寫一個(gè)實(shí)現(xiàn)了 ConstraintValidator
接口的驗(yàn)證器類。在上面的例子中,我們定義了一個(gè) AgeValidator
類,用于驗(yàn)證年齡是否在合法范圍內(nèi)(18到60歲)。然后,我們需要在需要驗(yàn)證的地方使用 @ValidAge
注解來標(biāo)記需要驗(yàn)證的參數(shù)。
@RestController public class UserController { @PostMapping("/user") public ResponseEntity<String> createUser(@ValidAge @RequestParam("age") Integer age) { // 處理請(qǐng)求 return ResponseEntity.ok("User created successfully"); } }
在上述代碼中,我們使用了 @ValidAge
注解來驗(yàn)證 age
參數(shù)的合法性。當(dāng)參數(shù)驗(yàn)證失敗時(shí),框架會(huì)自動(dòng)拋出 MethodArgumentNotValidException
異常,并返回相應(yīng)的錯(cuò)誤信息。
3. 自定義驗(yàn)證錯(cuò)誤處理
除了使用框架提供的默認(rèn)錯(cuò)誤處理方式外,你還可以定制化錯(cuò)誤處理。可以通過編寫全局異常處理器來對(duì)參數(shù)驗(yàn)證失敗時(shí)的異常進(jìn)行捕獲和處理。
@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity<String> handleMethodArgumentNotValid(MethodArgumentNotValidException ex) { BindingResult result = ex.getBindingResult(); List<ObjectError> errors = result.getAllErrors(); StringBuilder errorMessage = new StringBuilder(); for (ObjectError error : errors) { errorMessage.append(error.getDefaultMessage()).append("; "); } return ResponseEntity.badRequest().body(errorMessage.toString()); } }
在上述代碼中,我們使用 @ControllerAdvice
注解將該類聲明為全局異常處理器,并使用 @ExceptionHandler
注解來指定處理 MethodArgumentNotValidException
異常。當(dāng)參數(shù)驗(yàn)證失敗時(shí),會(huì)自動(dòng)進(jìn)入到這個(gè)處理方法中,我們可以從異常對(duì)象中獲取詳細(xì)的錯(cuò)誤信息并進(jìn)行處理。
結(jié)論
Spring Boot提供了多種靈活且強(qiáng)大的參數(shù)驗(yàn)證技巧和使用方法,包括使用JSR-303注解進(jìn)行參數(shù)驗(yàn)證、自定義驗(yàn)證器以及自定義驗(yàn)證錯(cuò)誤處理等。通過合理地運(yùn)用這些技巧,我們可以保證應(yīng)用程序接收到正確且完整的參數(shù)輸入,提高系統(tǒng)的穩(wěn)定性和安全性。
到此這篇關(guān)于Spring Boot常用的參數(shù)驗(yàn)證技巧和使用方法的文章就介紹到這了,更多相關(guān)Spring Boot參數(shù)驗(yàn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot如何優(yōu)雅實(shí)現(xiàn)接口參數(shù)驗(yàn)證
- Springboot中攔截GET請(qǐng)求獲取請(qǐng)求參數(shù)驗(yàn)證合法性核心方法
- SpringBoot validator參數(shù)驗(yàn)證restful自定義錯(cuò)誤碼響應(yīng)方式
- SpringBoot整合Hibernate Validator實(shí)現(xiàn)參數(shù)驗(yàn)證功能
- Spring Boot利用JSR303實(shí)現(xiàn)參數(shù)驗(yàn)證的方法實(shí)例
- Kotlin + Spring Boot 請(qǐng)求參數(shù)驗(yàn)證的代碼實(shí)例
相關(guān)文章
詳解Idea SpringBoot搭建SpringCloud的準(zhǔn)備工作(推薦)
這篇文章主要介紹了Idea SpringBoot搭建SpringCloud的準(zhǔn)備工作(推薦),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10Java實(shí)現(xiàn)讀取resources目錄下的文件路徑的九種方式
本文主要介紹了Java實(shí)現(xiàn)讀取resources目錄下的文件路徑的九種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04MyBatis-Flex BaseMapper的接口基本用法小結(jié)
本文主要介紹了MyBatis-Flex BaseMapper的接口基本用法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02JavaSE圖像驗(yàn)證碼簡(jiǎn)單識(shí)別程序詳解
這篇文章主要為大家詳細(xì)介紹了JavaSE圖像驗(yàn)證碼簡(jiǎn)單識(shí)別程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01SpringBoot中短時(shí)間連續(xù)請(qǐng)求時(shí)出現(xiàn)Cookie獲取異常問題的解決方案
在 Spring Boot Web 應(yīng)用中,每個(gè)請(qǐng)求都會(huì)攜帶 HttpServletRequest,其中包含 Cookie 等關(guān)鍵信息,如果某個(gè)請(qǐng)求對(duì)象的 cookieParsed 標(biāo)記在異步線程中被錯(cuò)誤修改,可能會(huì)導(dǎo)致 短時(shí)間內(nèi)的后續(xù)請(qǐng)求無法正確解析 Cookie,本文給大家介紹了詳細(xì)解決方法,需要的朋友可以參考下2025-04-04