自定義@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();
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM