自定义注解
创建注解
@Target({ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {MyConstraintValidator.class}) // 引入自定义验证规则文件
public @interface MyValid {
// 自定义属性,最小长度,可以设置默认值,也可以不设置
int min() default 3;
String message() default "{javax.validation.constraints.NotBlank.message}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
创建自定义验证规则文件,简单的实现
/*
* 需要实现ConstraintValidator<A extends Annotation, T>
* A extends Annotation:需要设置为自定义注解类型
* T:需要校验数据的类型
**/
public class MyConstraintValidator implements ConstraintValidator<MyValid, Object> {
/**
*初始化验证器,可以初始化验证注解
*@param constraintAnnotation 验证注解的实例
*/
@Override
public void initialize(MyValid constraintAnnotation) {
int min = constraintAnnotation.min();
System.out.println("Exception");
}
/**
*实现验证逻辑,判断name长度是否大于min()中定义的长度
*@param o 需要验证的对象
*@param constraintValidatorContext 约束验证器的上下文
*/
@Override
public boolean isValid(Object o, ConstraintValidatorContext constraintValidatorContext) {
if (o.toString().length()>min){
return true;
}
return false;
}
}
实体类
public class Person {
@MyValid(min = 3,message = "姓名长度不能低于3")
private String name;
}