在Bean Validation中,除了可以使用现成的校验注解之外,我们还可以在其中自定义自己的代码注解校验规则。
自定义注解——Email
下面是展示的自定义注解,实现的功能是对于电子邮箱的校验。
创建注解接口Email
package com.lyc.valueExtractor;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Target({ElementType.ANNOTATION_TYPE,ElementType.METHOD,ElementType.FIELD,ElementType.CONSTRUCTOR,ElementType.PARAMETER}) // 约束注解应用的目标元素类型(METHOD, FIELD, TYPE, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER等)
@Retention(RetentionPolicy.RUNTIME) // 约束注解应用的时机
@Documented
@Constraint(validatedBy ={EmailValidator.class}) // 与约束注解关联的验证器
public @interface Email {
String message() default "这不是有效的电子邮件格式"; // 约束注解验证时的输出消息
Class<?>[] groups() default { }; // 约束注解在验证时所属的组别
Class<? extends Payload>[] payload() default { }; // 约束注解的有效负载
/**
* 邮箱的验证规则
* @return
*/
String regexp() default "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9]+\\.[a-zA-Z]{2,4}";
@Target({ElementType.ANNOTATION_TYPE,ElementType.METHOD,ElementType.FIELD,ElementType.CONSTRUCTOR,ElementType.PARAMETER}) // 约束注解应用的目标元素类型(METHOD, FIELD, TYPE, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER等)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@interface List {
Email[] value();
}
}
创建注解的实现类EmailValidator
package com.lyc.valueExtractor;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class EmailValidator implements ConstraintValidator<Email,String> {
private String regexp;
@Override
public void initialize(Email constraintAnnotation) {
this.regexp = constraintAnnotation.regexp();
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null){
return true;
} else if (value.matches(regexp)){
return true;
}
return false;
}
}
创建应用自定义注解Email的实体类Person2
package com.lyc.validator.entity;
import