创建验证的注解,首先需要由一个实现验证接口的类,例如:
/**
* @Description: 验证注解所用的验证类
* @date: 2020-03-01
* ConstraintValidator: 后边的2个泛型意义:第一个表示注解是谁,第二个表示要验证的类型时什么,如果写的String,表示当前注解只能放在String上
* 这个类实现了ConstraintValidator接口,可以作为Spring的一个bean使用,不需要添加@Component
*/
public class MyConstraintValidator implements ConstraintValidator<MyConstraint, Object> {
@Override
public void initialize(MyConstraint constraintAnnotation) {
// TODO 校验器的初始化
System.out.println("MyConstraint 的 初始化");
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
// TODO 验证方式(返回true表示校验成功,否则表示校验失败)
boolean validSucessed = false;
if (value != null) {
validSucessed = true;
}
return validSucessed;
}
}
然后创建一个使用这个验证类来进行验证注解
/**
* @Description: 自定义验证注解
* @date: 2020-03-01
*/
@Target({ElementType.METHOD, ElementType.FIELD}) //注解的标注位置,这里取方法上和字段上
@Retention(RetentionPolicy.RUNTIME) //表明时运行时的一个注解
@Constraint(validatedBy =MyConstraintValidator.class) //表明校验注解:validatedBy 指明校验的类,判断由谁来执行校验
public @interface MyConstraint {
/**
* @Description: 一个注解不能为空,校验类注解必须由以下3个属性
* @date: 2020-03-01
*/
String message() default "{校验失败。}"; //校验不通过时发的信息
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
之后,这个注解就可以用来校验了
@NotBlank(message = "用户名不能为空")
private String userName;
@MyConstraint
private String password;
private String id;
@Past(message = "生日必须是过去的时间")
private Date birthday;