自定义注解

以 检验手机号的注解 IsMobile 为例
码云

1、先写个 手机号检验规则的方法

/**
 * 检验数据格式
 */
public class CheckUtil {

    private static final Pattern mobile_patten = Pattern.compile("[1]([3-9])[0-9]{9}$");

    /**
     * 手机号码校验
     *
     * @param mobile
     * @return boolean
     * @author LC
     * @operation add
     * @date 2:19 下午 2022/3/2
     **/
    public static boolean isMobile(String mobile) {
        if (StringUtils.isEmpty(mobile)) {
            return false;
        }
        Matcher matcher = mobile_patten.matcher(mobile);
        return matcher.matches();
    }

}

2、注解中具体实现的类

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContex
public class CheckMobile implements ConstraintValidator<IsMobile,String> {
    private boolean require = false;

    // 初始化
    @Override
    public void initialize(IsMobile constraintAnnotation) {
        require = constraintAnnotation.required();
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {

        // 如果必填,则直接校验
        if (require){
            return CheckUtil.isMobile(value);

        }else { // 如果非必填,则判断是否为空,不为空则校验
            if (StringUtils.isEmpty(value)){
                return true;
            }else {
                return CheckUtil.isMobile(value);
            }

        }

    }
}

3、自定义注解

/**
 * 验证手机号注解  自定义注解
 */

@Documented
@Constraint(validatedBy = {CheckMobile.class })
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
public @interface IsMobile {

    // 默认必填
    boolean required() default true;

    String message() default "手机号码 格式错误";

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };



}

解读:
3中的 @Constraint(validatedBy = {CheckMobile.class }) 为该注解具体实现的类

2中的 implements ConstraintValidator<IsMobile,String> 中的 IsMobile 为自定义注解的名称,String 为该注解用于参数的数据类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值