自定义注解校验参数
自定义注解校验参数:
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;
}
朋友和酒,少年和诗,路和远方。