自定义注解校验参数

自定义注解校验参数:
1、定义注解,写好返回值,申明注解的用处,文档生成

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

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Constraint(validatedBy = TypeValidClz.class)
@Documented
public @interface TypeValid {

    String message() default "type输入无效!";
    
    Class<?>[] groups() default {};
    
    Class<? extends Payload>[] payload() default {};

}



@Target(ElementType.FIELD)注解指定我们这个注解作用于FIELD:类的属性上,
@Retention(RetentionPolicy.RUNTIME)注解用于指定自定义注解的生命周期,即该注解在什么情况下可用。
RetentionPolicy.RUNTIME:表示注解在运行时仍然可用。允许程序通过反射读取注解的信息。换句话说,注解会在编译后保留,并在运行时可以通过反射机制访问。
@Documented 注解用于指示是否将被注解的元素包含在 Javadoc 中
@Constraint 注解用于标注自定义约束注解,并通过 validatedBy 属性指定约束注解的验证器(Validator)类。
validatedBy = TypeValidClz.class 指定了该约束注解的验证逻辑由TypeValidClz 类来实现。


import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class  TypeValidClz implements ConstraintValidator<TypeValid, String> {

    @Override
    public void initialize(TypeValid constraintAnnotation) {
    }
    
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        // 实现验证逻辑,验证 value 是否符合条件,下面逻辑指定了输入的值不能为空且已type开头
        return value != null && value.startsWith("type");
    }

}

使用注解限制参数:

public Class UserDTO{

private String name;

@TypeValid 
private String Type;

}
posted @ 2024-09-11 19:35  赤叶秋枫  阅读(20)  评论(0编辑  收藏  举报