diff --git a/src/main/java/com/youlai/boot/core/annotation/ValidField.java b/src/main/java/com/youlai/boot/core/annotation/ValidField.java new file mode 100644 index 00000000..e9ce5f00 --- /dev/null +++ b/src/main/java/com/youlai/boot/core/annotation/ValidField.java @@ -0,0 +1,28 @@ +package com.youlai.boot.core.annotation; + + +import com.youlai.boot.core.validator.FieldValidator; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + +import java.lang.annotation.*; + +@Documented +@Constraint(validatedBy = FieldValidator.class) +@Target({ElementType.FIELD, ElementType.PARAMETER}) +@Retention(RetentionPolicy.RUNTIME) +public @interface ValidField { + + + String message() default "非法字段"; + + Class[] groups() default {}; + + Class[] payload() default {}; + + /** + * 允许的字段值 + */ + String[] allowedValues(); + +} diff --git a/src/main/java/com/youlai/boot/core/validator/FieldValidator.java b/src/main/java/com/youlai/boot/core/validator/FieldValidator.java new file mode 100644 index 00000000..3872d303 --- /dev/null +++ b/src/main/java/com/youlai/boot/core/validator/FieldValidator.java @@ -0,0 +1,33 @@ +package com.youlai.boot.core.validator; + +import com.youlai.boot.core.annotation.ValidField; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + +import java.util.Arrays; + +/** + * 字段校验器 + * + * @author Ray.Hao + * @since 2024/11/18 + */ +public class FieldValidator implements ConstraintValidator { + + private String[] allowedValues; + + @Override + public void initialize(ValidField constraintAnnotation) { + // 初始化允许的值列表 + this.allowedValues = constraintAnnotation.allowedValues(); + } + + @Override + public boolean isValid(String value, ConstraintValidatorContext context) { + if (value == null) { + return true; // 如果字段允许为空,可以返回 true + } + // 检查值是否在允许列表中 + return Arrays.asList(allowedValues).contains(value); + } +}