自定义@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(); } }
和所有以梦为马的诗人一样,随处可栖--