最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot 自動(dòng)參數(shù)校驗(yàn)的實(shí)現(xiàn)步驟

 更新時(shí)間:2025年06月03日 10:18:51   作者:yuren_xia  
在 Spring Boot中實(shí)現(xiàn)參數(shù)自動(dòng)校驗(yàn)主要依靠 Java Bean Validation API(JSR 380)和 Spring 的集成支持,下面給大家介紹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. 添加依賴

pom.xml 中添加驗(yàn)證依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2. 在實(shí)體類/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[添加依賴] --> 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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中實(shí)現(xiàn)多文件打包下載的兩種方案

    SpringBoot中實(shí)現(xiàn)多文件打包下載的兩種方案

    在Spring Boot中實(shí)現(xiàn)多文件打包下載,一般是將多個(gè)文件壓縮成一個(gè)ZIP文件再進(jìn)行下載,以下是兩種典型實(shí)現(xiàn)方案以及代碼示例,需要的朋友可以參考下
    2025-09-09
  • IntelliJ IDEA 2020.1 EAP4 發(fā)布,重命名/更改簽名新功能一覽

    IntelliJ IDEA 2020.1 EAP4 發(fā)布,重命名/更改簽名新功能一覽

    這篇文章主要介紹了IntelliJ IDEA 2020.1 EAP4 發(fā)布,重命名/更改簽名新功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • JAVA Frame 窗體背景圖片,首位相接滾動(dòng)代碼實(shí)例

    JAVA Frame 窗體背景圖片,首位相接滾動(dòng)代碼實(shí)例

    這篇文章主要介紹了JAVA Frame 窗體背景圖片,首位相接滾動(dòng)代碼示例,需要的朋友可以參考下復(fù)制代碼
    2017-04-04
  • 淺談Java?abstract關(guān)鍵字不能和哪些關(guān)鍵字共存

    淺談Java?abstract關(guān)鍵字不能和哪些關(guān)鍵字共存

    本文主要介紹了Java?abstract關(guān)鍵字不能和哪些關(guān)鍵字共存,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-10-10
  • java日志LoggerFactory.getLogger的用法及說(shuō)明

    java日志LoggerFactory.getLogger的用法及說(shuō)明

    這篇文章主要介紹了java日志LoggerFactory.getLogger的用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • mybatis-plus主鍵id生成、字段自動(dòng)填充的實(shí)現(xiàn)代碼

    mybatis-plus主鍵id生成、字段自動(dòng)填充的實(shí)現(xiàn)代碼

    這篇文章主要介紹了mybatis-plus主鍵id生成、字段自動(dòng)填充的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Java迭代器與Collection接口超詳細(xì)講解

    Java迭代器與Collection接口超詳細(xì)講解

    Collection也稱集合,集合概述:集合是Java中提供的一種容器,可以用來(lái)存儲(chǔ)多個(gè)數(shù)據(jù)。Iterator(迭代器)不是一個(gè)集合,它是一種用于訪問(wèn)集合的方法,可用于迭代 ArrayList 和 HashSet 等集合
    2022-07-07
  • springboot統(tǒng)一接口返回?cái)?shù)據(jù)的實(shí)現(xiàn)

    springboot統(tǒng)一接口返回?cái)?shù)據(jù)的實(shí)現(xiàn)

    這篇文章主要介紹了springboot統(tǒng)一接口返回?cái)?shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • IDEA2021安裝及常用功能設(shè)置

    IDEA2021安裝及常用功能設(shè)置

    這篇文章主要介紹了IDEA2021安裝及常用功能設(shè)置,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • java使用DOM4J對(duì)XML文件進(jìn)行增刪改查操作

    java使用DOM4J對(duì)XML文件進(jìn)行增刪改查操作

    這篇文章主要為大家詳細(xì)介紹了java使用DOM4J對(duì)XML文件進(jìn)行增刪改查操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12

最新評(píng)論

习水县| 芒康县| 淳安县| 永平县| 四子王旗| 沁源县| 平武县| 原平市| 车险| 铜鼓县| 阳山县| 达孜县| 新龙县| 久治县| 宣化县| 修文县| 广河县| 岐山县| 石嘴山市| 大名县| 额济纳旗| 和静县| 渭源县| 德钦县| 安远县| 台安县| 房山区| 烟台市| 镇原县| 金坛市| 吉木乃县| 易门县| 京山县| 兰溪市| 马公市| 岳池县| 南安市| 宁蒗| 平昌县| 嘉义县| 固安县|