Java中@Constraint實現(xiàn)自定義校驗注解
@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<ConstraintViolation<User>> violations = validator.validate(user); for (ConstraintViolation<User> 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)文章
restTemplate發(fā)送get與post請求并且?guī)?shù)問題
這篇文章主要介紹了restTemplate發(fā)送get與post請求并且?guī)?shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07Spring security權(quán)限配置與使用大全
Spring Security 本質(zhì)上是借助一系列的 Servlet Filter來提供各種安全性功能,但這并不需要我們手動去添加或者創(chuàng)建多個Filter,本文重點給大家介紹spring-security的配置與使用及實現(xiàn)方式,感興趣的朋友一起看看吧2021-09-09Java日常練習(xí)題,每天進(jìn)步一點點(29)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07SpringBoot詳細(xì)分析自動裝配原理并實現(xiàn)starter
相對于傳統(tǒng)意義上的Spring項目,SpringBoot具有開箱即用,簡化配置,內(nèi)置Tomcat等等等等一系列的特點。在這些特點中,最重要的兩條就是約定優(yōu)于配置和自動裝配2022-07-07Java數(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