Java中@Constraint實現(xiàn)自定義校驗注解
@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<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接口,編寫具體的校驗邏輯。 - 應用注解:在實體類的字段上使用自定義校驗注解。
- 測試校驗:使用
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ā)送及壓縮功能 ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-07-07
SpringBoot3通過GraalVM生成exe執(zhí)行文件問題
文章介紹了如何安裝GraalVM和Visual Studio,并通過Spring Boot項目將Java應用程序封裝成可執(zhí)行文件(.exe)2024-12-12
詳解Spring Boot中整合Sharding-JDBC讀寫分離示例
這篇文章主要介紹了詳解Spring Boot中整合Sharding-JDBC讀寫分離示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03
關(guān)于SpringBoot靜態(tài)資源路徑管理問題
這篇文章主要介紹了SpringBoot靜態(tài)資源路徑管理,主要包括默認靜態(tài)資源路徑,增加靜態(tài)資源路徑前綴的相關(guān)操作,本文給大家介紹的非常詳細,需要的朋友可以參考下2022-05-05

