亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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)建自己的校驗邏輯,并將其應(yī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. 應(yīng)用自定義校驗注解

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

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. 測試校驗

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

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 接口,編寫具體的校驗邏輯。
  • 應(yīng)用注解:在實體類的字段上使用自定義校驗注解。
  • 測試校驗:使用 Validator 對象進(jìn)行校驗,并處理校驗結(jié)果。

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

相關(guān)文章

  • Java中的包、抽象類、接口詳解(最新整理)

    Java中的包、抽象類、接口詳解(最新整理)

    文章介紹了Java中的包、抽象類、接口以及實現(xiàn)多個接口的概念,包用于組織類,避免命名沖突,抽象類用于定義不能被實例化的類,可以包含抽象方法,接口則定義了一組抽象方法,可以被類實現(xiàn),實現(xiàn)多個接口可以實現(xiàn)類似多繼承的效果,感興趣的朋友一起看看吧
    2025-02-02
  • restTemplate發(fā)送get與post請求并且?guī)?shù)問題

    restTemplate發(fā)送get與post請求并且?guī)?shù)問題

    這篇文章主要介紹了restTemplate發(fā)送get與post請求并且?guī)?shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 客戶端設(shè)置超時時間真的很重要

    客戶端設(shè)置超時時間真的很重要

    今天小編就為大家分享一篇關(guān)于客戶端設(shè)置超時時間真的很重要,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java 方法遞歸的思路詳解

    Java 方法遞歸的思路詳解

    程序調(diào)用自身的編程技巧稱為遞歸( recursion)。遞歸做為一種算法在程序設(shè)計語言中廣泛應(yīng)用。但是如果沒終止條件會造成死循環(huán),所以遞歸代碼里要有結(jié)束自調(diào)自的條件,接下來講解一下學(xué)習(xí)遞歸的思路
    2022-04-04
  • Spring security權(quán)限配置與使用大全

    Spring security權(quán)限配置與使用大全

    Spring Security 本質(zhì)上是借助一系列的 Servlet Filter來提供各種安全性功能,但這并不需要我們手動去添加或者創(chuàng)建多個Filter,本文重點給大家介紹spring-security的配置與使用及實現(xiàn)方式,感興趣的朋友一起看看吧
    2021-09-09
  • java模仿實現(xiàn)QQ登錄界面

    java模仿實現(xiàn)QQ登錄界面

    這篇文章主要為大家詳細(xì)介紹了java模仿實現(xiàn)qq登錄界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Java日常練習(xí)題,每天進(jìn)步一點點(29)

    Java日常練習(xí)題,每天進(jìn)步一點點(29)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • Java行為型模式中命令模式分析

    Java行為型模式中命令模式分析

    在軟件設(shè)計中,我們經(jīng)常需要向某些對象發(fā)送請求,但是并不知道請求的接收者是誰,也不知道被請求的操作是哪個,我們只需在程序運行時指定具體的請求接收者即可,此時可以使用命令模式來進(jìn)行設(shè)計
    2023-02-02
  • SpringBoot詳細(xì)分析自動裝配原理并實現(xiàn)starter

    SpringBoot詳細(xì)分析自動裝配原理并實現(xiàn)starter

    相對于傳統(tǒng)意義上的Spring項目,SpringBoot具有開箱即用,簡化配置,內(nèi)置Tomcat等等等等一系列的特點。在這些特點中,最重要的兩條就是約定優(yōu)于配置和自動裝配
    2022-07-07
  • Java數(shù)據(jù)結(jié)構(gòu)之線段樹的原理與實現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之線段樹的原理與實現(xiàn)

    線段樹是一種二叉搜索樹,是用來維護區(qū)間信息的數(shù)據(jù)結(jié)構(gòu)。本文將利用示例詳細(xì)講講Java數(shù)據(jù)結(jié)構(gòu)中線段樹的原理與實現(xiàn),需要的可以參考一下
    2022-06-06

最新評論