关于自定义验证
请查看基础知识: 基础.md
@Constraint
主要作用就是帮助我们来处理验证逻辑的,指定使用什么验证器处理。
@Documented
@Target({ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Constraint {
Class<? extends ConstraintValidator<?, ?>>[] validatedBy();
}
ConstraintValidator接口
public interface ConstraintValidator<A extends Annotation, T> {
default void initialize(A constraintAnnotation) {
}
boolean isValid(T var1, ConstraintValidatorContext var2);
}
- ConstraintValidator 是一个接口,接受两个泛型。
- 接受的注解类
- 校验的数据类型
- 提供两个方法。
default void initialize(A constraintAnnotation) {}。初始化一些数据信息。boolean isValid(T var1, ConstraintValidatorContext var2);。传递两个参数,第一个是数据信息,第二个上下文信息。验证通过则返回TRUE
手机号正则校验注解
-
创建注解
@PhoneNumber/** * 手机号校验 */ @Documented @Constraint( validatedBy = {PhoneNumberValidator.class} ) @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE}) @Retention(RetentionPolicy.RUNTIME) public @interface PhoneNumber { // 提示信息 String message() default "电话号码格式不正确"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; } -
创建类
PhoneNumberValidator实现校验接口ConstraintValidator/*** * phoneNumber 校验器 */ public class PhoneNumberValidator implements ConstraintValidator<PhoneNumber, String> { private static final Pattern PATTERN = Pattern.compile(^1[3|4|5|6|7|8|9][0-9]\d{8}$); @Override public void initialize(PhoneNumber constraintAnnotation) { ConstraintValidator.super.initialize(constraintAnnotation); } @Override public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) { if (value != null) { Matcher matcher = PATTERN.matcher(value); return matcher.find(); } return true; } } -
使用
@NotBlank(message = "请填写手机号") @PhoneNumber private String mobile;