Spring Boot 自動(dòng)參數(shù)校驗(yàn)的實(shí)現(xiàn)步驟
在 Spring Boot 中實(shí)現(xiàn)參數(shù)自動(dòng)校驗(yàn)主要依靠 Java Bean Validation API(JSR 380)和 Spring 的集成支持。以下是詳細(xì)實(shí)現(xiàn)步驟:
1. 添加依賴(lài)
在 pom.xml 中添加驗(yàn)證依賴(lài):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>2. 在實(shí)體類(lèi)/DTO中添加校驗(yàn)注解
使用注解標(biāo)記需要校驗(yàn)的字段:
public class UserDTO {
@NotBlank(message = "用戶名不能為空")
private String username;
@Email(message = "郵箱格式不正確")
private String email;
@Min(value = 18, message = "年齡必須大于18歲")
private int age;
@Pattern(regexp = "1[3-9]\\d{9}", message = "手機(jī)號(hào)格式不正確")
private String phone;
// Getter/Setter省略
}常用校驗(yàn)注解:
@NotNull:非 null@NotBlank:非空(字符串)@NotEmpty:非空集合/數(shù)組@Min/@Max:數(shù)值范圍@Size:長(zhǎng)度范圍@Email:郵箱格式@Pattern:正則表達(dá)式
3. 在Controller中使用校驗(yàn)
在接收參數(shù)的請(qǐng)求方法中添加 @Valid 或 @Validated:
@PostMapping("/create")
public ResponseEntity<?> createUser(@Valid @RequestBody UserDTO userDTO) {
// 校驗(yàn)通過(guò)后執(zhí)行業(yè)務(wù)邏輯
return ResponseEntity.ok("用戶創(chuàng)建成功");
}注意:
@Valid是標(biāo)準(zhǔn) JSR 注解,@Validated是 Spring 的增強(qiáng)版(支持分組校驗(yàn))。
4. 處理校驗(yàn)異常
添加全局異常處理器捕獲校驗(yàn)失敗異常:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, String>> handleValidationException(MethodArgumentNotValidException ex) {
Map<String, String> errors = new HashMap<>();
ex.getBindingResult().getFieldErrors().forEach(error -> {
errors.put(error.getField(), error.getDefaultMessage());
});
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errors);
}
}響應(yīng)示例:
{
"username": "用戶名不能為空",
"email": "郵箱格式不正確"
}5. 進(jìn)階用法
分組校驗(yàn)(不同場(chǎng)景不同規(guī)則)
定義分組接口:
public interface CreateGroup {}
public interface UpdateGroup {}在 DTO 中指定分組:
public class UserDTO {
@NotNull(groups = UpdateGroup.class, message = "ID不能為空")
private Long id;
@NotBlank(groups = {CreateGroup.class, UpdateGroup.class})
private String name;
}Controller 指定分組:
@PostMapping("/update")
public void updateUser(@Validated(UpdateGroup.class) @RequestBody UserDTO dto) {
// ...
}自定義校驗(yàn)注解
創(chuàng)建自定義注解:
@Target({FIELD})
@Retention(RUNTIME)
@Constraint(validatedBy = PhoneValidator.class)
public @interface ValidPhone {
String message() default "手機(jī)號(hào)格式錯(cuò)誤";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}實(shí)現(xiàn)校驗(yàn)邏輯:
public class PhoneValidator implements ConstraintValidator<ValidPhone, String> {
@Override
public boolean isValid(String phone, ConstraintValidatorContext context) {
return phone != null && phone.matches("1[3-9]\\d{9}");
}
}6. 測(cè)試校驗(yàn)
使用 Postman 或 curl 發(fā)送無(wú)效請(qǐng)求:
curl -X POST http://localhost:8080/create \
-H "Content-Type: application/json" \
-d '{"username":"", "email":"invalid-email"}'將返回:
{
"username": "用戶名不能為空",
"email": "郵箱格式不正確"
}總結(jié)流程:
graph TD
A[添加依賴(lài)] --> B[DTO添加校驗(yàn)注解]
B --> C[Controller添加@Valid]
C --> D[全局異常處理器]
D --> E[返回錯(cuò)誤信息]通過(guò)以上步驟,Spring Boot 會(huì)自動(dòng)完成參數(shù)校驗(yàn),無(wú)需手動(dòng)編寫(xiě)校驗(yàn)邏輯,大幅提升開(kāi)發(fā)效率。
到此這篇關(guān)于Spring Boot 自動(dòng)參數(shù)校驗(yàn)的文章就介紹到這了,更多相關(guān)Spring Boot 自動(dòng)參數(shù)校驗(yàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot之controller參數(shù)校驗(yàn)詳解
- SpringBoot參數(shù)校驗(yàn)及原理全面解析
- SpringBoot集成Aviator實(shí)現(xiàn)參數(shù)校驗(yàn)的代碼工程
- SpringBoot使用validation進(jìn)行自參數(shù)校驗(yàn)的方法
- SpringBoot實(shí)現(xiàn)各種參數(shù)校驗(yàn)總結(jié)(建議收藏!)
- SpringBoot中利用@Valid和@Validated進(jìn)行參數(shù)校驗(yàn)
- SpringBoot使用@NotEmpty、@NotBlank、@NotNull注解進(jìn)行參數(shù)校驗(yàn)
- springboot使用@Validated或@Valid注解校驗(yàn)參數(shù)方式
相關(guān)文章
springboot2.x整合shiro權(quán)限框架的使用
這篇文章主要介紹了springboot2.x整合shiro權(quán)限框架的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
自定義log4j2中的Appender來(lái)獲取日志內(nèi)容的示例代碼
在 Log4j2 中,Appender 是負(fù)責(zé)將日志事件輸出到目標(biāo)地點(diǎn)的組件,本文講述的是通過(guò) log4j 中自定義的 Appender 來(lái)獲取需要打印的日志信息,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2024-02-02
springboot結(jié)合前端實(shí)現(xiàn)網(wǎng)頁(yè)跳轉(zhuǎn)功能實(shí)例
今天處理Springboot統(tǒng)一異常攔截的時(shí)候,遇到了頁(yè)面跳轉(zhuǎn)的問(wèn)題,這篇文章主要給大家介紹了關(guān)于springboot結(jié)合前端實(shí)現(xiàn)網(wǎng)頁(yè)跳轉(zhuǎn)功能的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12
java模擬http的Get/Post請(qǐng)求,并設(shè)置ip與port代理的方法
下面小編就為大家?guī)?lái)一篇java模擬http的Get/Post請(qǐng)求,并設(shè)置ip與port代理的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02
Java編寫(xiě)簡(jiǎn)單計(jì)算器的完整實(shí)現(xiàn)過(guò)程
這篇文章主要給大家介紹了關(guān)于Java編寫(xiě)簡(jiǎn)單計(jì)算器的完整實(shí)現(xiàn)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
使用Java實(shí)現(xiàn)簡(jiǎn)單的區(qū)塊鏈程序的方法
這篇文章主要介紹了使用Java實(shí)現(xiàn)簡(jiǎn)單的區(qū)塊鏈程序的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04

