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

Java中@Constraint實現(xiàn)自定義校驗注解

 更新時間:2025年05月22日 10:14:55   作者:月軒居士  
本文主要介紹了Java中@Constraint實現(xiàn)自定義校驗注解,需配合ConstraintValidator實現(xiàn)校驗邏輯,適用于HibernateValidator等框架,感興趣的可以了解一下

@Constraint 是 Java 中用于定義自定義校驗注解的一個元注解。它通常與 Hibernate Validator 或其他基于 JSR 380(Bean Validation 2.0)的校驗框架一起使用。通過 @Constraint 注解,你可以創(chuàng)建自己的校驗邏輯,并將其應用到實體類的字段上

1. 創(chuàng)建自定義校驗注解

首先,定義一個自定義校驗注解。假設(shè)我們想創(chuàng)建一個注解 @ValidLength,用于校驗字符串的最大長度為20位。

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Constraint(validatedBy = ValidLengthValidator.class)
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidLength {
    String message() default "長度必須在1到20個字符之間";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
    int min() default 1;
    int max() default 20;
}

2. 創(chuàng)建校驗器

接下來,創(chuàng)建一個實現(xiàn) ConstraintValidator 接口的類,用于實現(xiàn)具體的校驗邏輯。

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class ValidLengthValidator implements ConstraintValidator<ValidLength, String> {

    private int min;
    private int max;

    @Override
    public void initialize(ValidLength constraintAnnotation) {
        this.min = constraintAnnotation.min();
        this.max = constraintAnnotation.max();
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if (value == null) {
            return true; // 允許為空
        }
        return value.length() >= min && value.length() <= max;
    }
}

 3. 應用自定義校驗注解

在實體類中使用自定義校驗注解。

import javax.validation.constraints.NotNull;

public class User {

    @NotNull
    @ValidLength(min = 1, max = 20)
    private String username;

    // Getters and Setters
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

4. 測試校驗

編寫一個測試類來驗證校驗邏輯是否按預期工作。

import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.ConstraintViolation;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        User user = new User();
        user.setUsername("12345678901234567890"); // 20位,合法

        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();

        Set&lt;ConstraintViolation&lt;User&gt;&gt; violations = validator.validate(user);
        for (ConstraintViolation&lt;User&gt; violation : violations) {
            System.out.println(violation.getMessage());
        }

        if (violations.isEmpty()) {
            System.out.println("校驗通過");
        } else {
            System.out.println("校驗失敗");
        }
    }
}

輸出
運行上述代碼后,如果 username 的長度在1到20個字符之間,輸出將是:
校驗通過
如果 username 的長度超過20個字符或小于1個字符,輸出將是:
長度必須在1到20個字符之間
校驗失敗

總結(jié)

  • 自定義校驗注解:使用 @Constraint 注解定義自定義校驗注解。
  • 校驗器:實現(xiàn) ConstraintValidator 接口,編寫具體的校驗邏輯。
  • 應用注解:在實體類的字段上使用自定義校驗注解。
  • 測試校驗:使用 Validator 對象進行校驗,并處理校驗結(jié)果。

到此這篇關(guān)于Java中@Constraint實現(xiàn)自定義校驗注解的文章就介紹到這了,更多相關(guān)Java 自定義校驗注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot實現(xiàn)添加郵件發(fā)送及壓縮功能

    springboot實現(xiàn)添加郵件發(fā)送及壓縮功能

    這篇文章主要介紹了springboot實現(xiàn)添加郵件發(fā)送及壓縮功能 ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • Java進程cpu占用過高問題解決

    Java進程cpu占用過高問題解決

    這篇文章主要介紹了Java進程cpu占用過高問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • 關(guān)于Java中避免空指針的方法

    關(guān)于Java中避免空指針的方法

    這篇文章主要介紹了關(guān)于Java中避免空指針的方法,空指針異常就是我們在對空對象進行的任何操作都會報空指針異常,所謂的指針,就是java中的對象的引用,比如String?s;這個就是指針,需要的朋友可以參考下
    2023-07-07
  • SpringBoot3通過GraalVM生成exe執(zhí)行文件問題

    SpringBoot3通過GraalVM生成exe執(zhí)行文件問題

    文章介紹了如何安裝GraalVM和Visual Studio,并通過Spring Boot項目將Java應用程序封裝成可執(zhí)行文件(.exe)
    2024-12-12
  • Mybatis多線程下如何使用Example詳解

    Mybatis多線程下如何使用Example詳解

    這篇文章主要給大家介紹了關(guān)于Mybatis多線程下如何使用Example的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Mybatis具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-12-12
  • Spring手寫簡化版MVC流程詳解

    Spring手寫簡化版MVC流程詳解

    Spring MVC是Spring Framework的一部分,是基于Java實現(xiàn)MVC的輕量級Web框架。本文將通過簡單示例帶大家掌握SpringMVC簡化版手寫方法,感興趣的可以了解一下
    2022-11-11
  • Java依賴包漏洞檢測命令詳解

    Java依賴包漏洞檢測命令詳解

    這篇文章主要介紹了Java依賴包漏洞檢測命令,你可以在修復漏洞后快速進行依賴項的安全檢查,并生成新的報告,而不需要等待 CVE 數(shù)據(jù)庫的下載和更新,這樣可以顯著提高掃描的效率,需要的朋友可以參考下
    2024-11-11
  • Spring 依賴注入的幾種方式詳解

    Spring 依賴注入的幾種方式詳解

    本篇文章主要介紹了Spring 依賴注入的幾種方式詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 詳解Spring Boot中整合Sharding-JDBC讀寫分離示例

    詳解Spring Boot中整合Sharding-JDBC讀寫分離示例

    這篇文章主要介紹了詳解Spring Boot中整合Sharding-JDBC讀寫分離示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 關(guān)于SpringBoot靜態(tài)資源路徑管理問題

    關(guān)于SpringBoot靜態(tài)資源路徑管理問題

    這篇文章主要介紹了SpringBoot靜態(tài)資源路徑管理,主要包括默認靜態(tài)資源路徑,增加靜態(tài)資源路徑前綴的相關(guān)操作,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-05-05

最新評論

历史| 鸡西市| 克什克腾旗| 长春市| 徐水县| 广丰县| 柞水县| 阿拉善右旗| 南川市| 涿鹿县| 南靖县| 西畴县| 定日县| 南宫市| 五大连池市| 长沙市| 旺苍县| 临桂县| 兴业县| 岫岩| 健康| 龙里县| 易门县| 南召县| 肇东市| 和田市| 郁南县| 安徽省| 鸡西市| 阿图什市| 古蔺县| 崇州市| 无棣县| 额尔古纳市| 阿坝| 蓬溪县| 新绛县| 芦山县| 海城市| 丰都县| 襄汾县|