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

關于javax.validation.constraints的超詳細說明

 更新時間:2025年07月09日 09:21:46   作者:悟能不能悟  
這篇文章主要給大家介紹了關于javax.validation.constraints的超詳細說明,文中通過代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下

前言

以下是關于 javax.validation.constraints(現為 ?Jakarta Bean Validation)的詳細說明,涵蓋核心注解、使用場景、代碼示例及最佳實踐:

一、javax.validation.constraints 是什么?

  • ?作用?:提供一組標準注解,用于對 Java Bean 的字段或方法參數進行數據校驗(如非空、長度、范圍等)。
  • ?規(guī)范演進?:
    • Java EE 時期:包名為 javax.validation.constraints。
    • Jakarta EE 9+:包名遷移為 jakarta.validation.constraints(需注意依賴兼容性)。

二、核心注解列表及用法

1. 常用注解

?注解??校驗規(guī)則??支持類型?
@NotNull值不能為 null任意類型
@NotBlank字符串不能為空或純空格String
@NotEmpty集合/數組/字符串不能為空(長度 > 0)CollectionString 等
@Size(min, max)元素數量或字符串長度在指定范圍內集合、數組、字符串
@Min(value)數值必須 ≥ 指定最小值數值類型(intlong 等)
@Max(value)數值必須 ≤ 指定最大值同上
@DecimalMin(value)數值必須 ≥ 指定最小值(字符串形式,支持精度)BigDecimalString 等
@DecimalMax(value)數值必須 ≤ 指定最大值(字符串形式,支持精度)同上
@Digits(integer, fraction)數值整數部分最多 integer 位,小數部分最多 fraction 位數值類型
@Pattern(regexp)字符串必須匹配正則表達式String
@Email字符串必須是合法郵箱格式String
@Positive / @PositiveOrZero數值必須為正數或零數值類型
@Negative / @NegativeOrZero數值必須為負數或零數值類型
@Future / @FutureOrPresent日期必須在未來(或包含當前)DateLocalDate 等
@Past / @PastOrPresent日期必須在過去(或包含當前)同上

2. 注解示例代碼

public class User {
    @NotBlank(message = "用戶名不能為空")
    private String username;

    @Email(message = "郵箱格式無效")
    private String email;

    @Size(min = 6, max = 20, message = "密碼長度需在6-20位之間")
    private String password;

    @Min(value = 18, message = "年齡必須≥18歲")
    @Max(value = 100, message = "年齡必須≤100歲")
    private Integer age;

    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手機號格式無效")
    private String phone;
}

三、集成到 Spring Boot 中的步驟

1. 添加依賴

<!-- Spring Boot 2.x 使用 javax.validation -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

<!-- Jakarta EE 9+ 使用 jakarta.validation -->
<dependency>
    <groupId>jakarta.validation</groupId>
    <artifactId>jakarta.validation-api</artifactId>
    <version>3.0.2</version>
</dependency>

2. 在 Controller 中觸發(fā)校驗

使用 @Valid 或 @Validated 注解觸發(fā)校驗:

@PostMapping("/users")
public ResponseEntity<?> createUser(@RequestBody @Valid User user) {
    // 校驗通過后執(zhí)行業(yè)務邏輯
    return ResponseEntity.ok("用戶創(chuàng)建成功");
}

3. 處理校驗異常

通過 @ExceptionHandler 捕獲 MethodArgumentNotValidException

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<Map<String, String>> handleValidationException(MethodArgumentNotValidException ex) {
        Map<String, String> errors = new HashMap<>();
        ex.getBindingResult().getAllErrors().forEach(error -> {
            String fieldName = ((FieldError) error).getField();
            String errorMessage = error.getDefaultMessage();
            errors.put(fieldName, errorMessage);
        });
        return ResponseEntity.badRequest().body(errors);
    }
}

四、高級用法

1. 分組校驗

通過分組接口實現不同場景下的差異化校驗:

// 定義分組接口
public interface CreateGroup {}
public interface UpdateGroup {}

public class User {
    @NotNull(groups = UpdateGroup.class)
    private Long id;

    @NotBlank(groups = {CreateGroup.class, UpdateGroup.class})
    private String name;
}

// 在 Controller 中指定分組
@PostMapping("/users")
public ResponseEntity<?> createUser(@RequestBody @Validated(CreateGroup.class) User user) { ... }

2. 自定義校驗注解

實現自定義校驗邏輯(如密碼強度校驗):

@Target({FIELD})
@Retention(RUNTIME)
@Constraint(validatedBy = PasswordValidator.class)
public @interface StrongPassword {
    String message() default "密碼必須包含大小寫字母和數字";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

public class PasswordValidator implements ConstraintValidator<StrongPassword, String> {
    @Override
    public boolean isValid(String password, ConstraintValidatorContext context) {
        return password.matches("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d).+$");
    }
}

3. 級聯校驗

校驗對象內的嵌套對象:

public class Order {
    @Valid
    private List<@Valid Product> products; // 校驗每個 Product 的字段
}

五、校驗失敗的錯誤消息定制

1. 默認消息模板

每個注解的 message 屬性支持占位符:

@Size(min = 6, max = 20, message = "密碼長度需在{min}-{max}位之間")
private String password;

2. 國際化消息

在 messages.properties 或 ValidationMessages.properties 中定義:

user.email.invalid=郵箱格式無效

注解中使用:

@Email(message = "{user.email.invalid}")
private String email;

六、常見問題與解決方案

?問題??解決方案?
校驗未生效檢查是否添加了 @Valid 或 @Validated 注解;確認依賴已正確引入
嵌套對象校驗失敗在嵌套對象字段上添加 @Valid 注解
分組校驗不生效在 @Validated 注解中明確指定分組接口
自定義校驗器未觸發(fā)確認 @Constraint(validatedBy = MyValidator.class) 并實現 ConstraintValidator

七、總結

  • ?核心價值?:通過聲明式注解簡化數據校驗邏輯,減少樣板代碼。
  • ?最佳實踐?:
    • 優(yōu)先使用標準注解,避免重復造輪子。
    • 結合分組校驗實現多場景復用。
    • 統一處理校驗異常,返回清晰的錯誤信息。
  • ?擴展性?:通過自定義注解和校驗器滿足復雜業(yè)務需求。

到此這篇關于關于javax.validation.constraints超詳細說明的文章就介紹到這了,更多相關javax.validation.constraints說明內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JAVA獲取當前項目和文件所在路徑的實例代碼

    JAVA獲取當前項目和文件所在路徑的實例代碼

    這篇文章主要介紹了JAVA獲取當前項目和文件所在路徑的實例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Java并發(fā)編程之ThreadLocal詳解

    Java并發(fā)編程之ThreadLocal詳解

    今天給大家?guī)淼氖荍ava并發(fā)編程的相關知識,文中對ThreadLocal做了非常詳細的分析及介紹,對小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • 淺談Java中static關鍵字的作用

    淺談Java中static關鍵字的作用

    這篇文章主要介紹了Java中static關鍵字的作用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • SpringBoot項目啟動時提示程序包不存在和找不到符號的處理方法

    SpringBoot項目啟動時提示程序包不存在和找不到符號的處理方法

    最近接手同事開發(fā)的一個Springboot工作項目,從svn上整體拉取下來后,構建完成后,啟動的時候遇到了程序包找不到的情況,所以本文記錄了SpringBoot項目啟動時提示程序包不存在和找不到符號的處理方法,需要的朋友可以參考下
    2024-05-05
  • 認識Java底層操作系統與并發(fā)基礎

    認識Java底層操作系統與并發(fā)基礎

    這篇文章主要介紹了認識Java底層操作系統與并發(fā)基礎,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • springboot集成junit編寫單元測試實戰(zhàn)

    springboot集成junit編寫單元測試實戰(zhàn)

    在做單元測試時,代碼覆蓋率常常被拿來作為衡量測試好壞的指標,本文主要介紹了springboot集成junit編寫單元測試實戰(zhàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • SpringBoot 在測試時如何指定包的掃描范圍

    SpringBoot 在測試時如何指定包的掃描范圍

    這篇文章主要介紹了SpringBoot 在測試時如何指定包的掃描范圍,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 使用java swing實現qq登錄界面示例分享

    使用java swing實現qq登錄界面示例分享

    這篇文章主要介紹了使用java swing實現qq登錄界面示例,需要的朋友可以參考下
    2014-04-04
  • 簡述IDEA集成Git在實際項目中的運用

    簡述IDEA集成Git在實際項目中的運用

    這篇文章主要介紹了IDEA集成Git在實際項目中的運用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • Java如何實現定時任務

    Java如何實現定時任務

    這篇文章主要介紹了Java如何實現定時任務,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07

最新評論

聊城市| 儋州市| 北京市| 长沙县| 新龙县| 冷水江市| 金堂县| 康保县| 扶沟县| 宁国市| 枣阳市| 东安县| 南澳县| 盐亭县| 永昌县| 葫芦岛市| 尤溪县| 遵化市| 都兰县| 塔城市| 苍梧县| 南康市| 竹北市| 松阳县| 称多县| 开平市| 西盟| 五指山市| 垣曲县| 湘乡市| 惠州市| 丹江口市| 眉山市| 容城县| 兴隆县| 海伦市| 西和县| 辽源市| 淅川县| 新乡市| 大兴区|