ConstraintValidator 实现自定义注解

本文介绍如何通过自定义注解实现Java中的手机号格式校验,包括创建注解类、实现验证逻辑及工具方法,适用于需要进行数据格式校验的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在工作中有时需要实现校验,错误信息自定义,这时自定义注解就起作用了 

1、首先需要创建一个注解类:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(
        validatedBy = {IsMobileValidator.class}
)
public @interface IsMobile {
 
    boolean required() default true;
 
    String message() default "手机格式不正确";      自定义错误消息的内容
 
    Class<?>[] groups() default {};
 
    Class<? extends Payload>[] payload() default {};
    
}

2、验证,需要实现ConstraintValidator<IsMobile ,String>接口, 其中IsMobile 为注解,String为需要验证的类型

public class IsMobileValidator implements ConstraintValidator<IsMobile,String> {
 
    private boolean require = false;
 
    @Override
    public void initialize(IsMobile constraintAnnotation) {                             //初始化
        require = constraintAnnotation.required();
    }
 
    @Override
    public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
        if(require){
            return ValidatorUtils.isMobile(s);
        }else {
           if (StringUtils.isEmpty(s)) {
               return true;
           }else {
               return ValidatorUtils.isMobile(s);
           }
        }
    }
}

3、校验工具类

public class ValidatorUtils {
 
    private static final Pattern mobile_pattern = Pattern.compile("1\\d{10}");
 
    public static boolean isMobile(String src) {
        if (StringUtils.isEmpty(src)) {
            return false;
        }
        Matcher m = mobile_pattern.matcher(src);
        return m.matches();
    }
}
 

校验类需要实现ConstraintValidator接口。
接口使用了泛型,需要指定两个参数,第一个自定义注解类,第二个为需要校验的数据类型。
实现接口后要override两个方法,分别为initialize方法和isValid方法。其中initialize为初始化方法,可以在里面做一些初始化操作,isValid方法就是我们最终需要的校验方法了。可以在该方法中实现具体的校验步骤。本示例中进行了简单的手机号校验。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值