自定义@Validated注解

首先是自定义@Validated注解:

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {IsMobileValidator.class})
public @interface IsMobile {
    //默认这个参数必须得有
    boolean required() default true;
    //如果校验不通过,提示什么信息
    String message() default "手机号码格式错误";
    Class<?>[] groups() default { };
    Class<? extends Payload>[] payload() default { };
}

IsMobileValidator是这个注解具体的方法类:

@Slf4j
public class IsMobileValidator implements ConstraintValidator<IsMobile, String> {
    private boolean required = false;
    @Override
    public void initialize(IsMobile constraintAnnotation) {
        //初始化方法,拿到注解
        required = constraintAnnotation.required();
        log.info("initialize方法::========>>>>"+required);
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        log.info("isValid方法::========>>>>"+value);
        if (required) {         //如果这个值是必须的
            return ValidatorUtil.isMobile(value);
        } else {                //如果这个值不是必须的,那么先判断里面有没有值
            if (StringUtils.isEmpty(value)) {
                return true;
            } else {
                return ValidatorUtil.isMobile(value);   //有值就判断一下他的格式是不是手机格式
            }
        }
    }
}

util中是具体的方法实现:

public class ValidatorUtil {
    private static final String regex = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0,5-9]))\\d{8}$";
    private static final Pattern mobile_pattern = Pattern.compile(regex);

    public static boolean isMobile(String src) {
        if (StringUtils.isEmpty(src)) {
            return false;
        }
        Matcher m = mobile_pattern.matcher(src);
        return m.matches();
    }
}
posted @ 2020-01-14 13:39  萧暮  阅读(1631)  评论(0编辑  收藏  举报