spring中自定义valid验证器

直接来步骤

第一步:增加验证依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

第二步:创建annotation注解目录

第三步:开始创建验证器以验证长度为例

@Constraint  中指定进行验证的验证方法类

@Documented
@Target(value = {ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = LengthValidator.class)
public @interface LengthValid {
    /** 报错信息 */
    String message() default "长度不符合规范";

    /** 最小值 */
    int min() default 0;

    /** 最大值 */
    int max() default Integer.MAX_VALUE;

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

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

第四步:创建验证方法类

public class LengthValidator implements ConstraintValidator<LengthValid,Object> {
    private LengthValid annotation;
    @Override
    public void initialize(LengthValid constraintAnnotation) {
        annotation = constraintAnnotation;
    }

    @Override
    public boolean isValid(Object value, ConstraintValidatorContext constraintValidatorContext) {
        if( null == value ){
            return true;
        }

        try {
            int len = String.valueOf(value).length();
            if( len >= annotation.min() && len <= annotation.max()){
                return true;
            }
        } catch (Exception e) {
           throw new RuntimeException(e);
        }
        return false;
    }
}

 基于以上的四步,我们就已经创建完成了自定义的注解验证。接下来是如何使用:

仅仅只需要在实体属性上增加相关的注解就可以使用了

@LengthValid(min=2,max = 100,message = "姓名只支持最短2位最长100位")
private String name;

以上就完成了自定义验证类了。


下面在给大家提供一个枚举值验证的方法,不需要的可以不往下看了

增加自定义枚举验证类

下面直接上注解和处理类及使用方法。

一、注解:

@Documented
@Target(value = {ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = EnumValidator.class)
public @interface EnumValid {
    /** 报错信息 */
    String message() default "枚举字符不存在";

    /** 枚举类 */
    Class<?> clazz();

    /** 枚举获取值方法 */
    String method();

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

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

二、处理类:

public class EnumValidator implements ConstraintValidator<EnumValid,Object> {
    private EnumValid annotation;
    @Override
    public void initialize(EnumValid constraintAnnotation) {
        annotation = constraintAnnotation;
    }

    @Override
    public boolean isValid(Object value, ConstraintValidatorContext constraintValidatorContext) {
        //如果传的参数为null 不需要验证枚举中是否存在
        if( null == value ){
            return true;
        }
        //获取枚举类数据
        Object[] enumConstants = annotation.clazz().getEnumConstants();

        //获取方法
        try {
            //获取枚举类获取code的方法
            Method method = annotation.clazz().getMethod(annotation.method());
            for (Object enumConstant : enumConstants) {
                //循环枚举类数据,并通过method反射获取与value判断是否相等
                if(value.equals(method.invoke(enumConstant))){
                    return true;
                }
            }
        } catch (Exception e) {
           throw new RuntimeException(e);
        }
        return false;
    }
}

三、使用方法:

//clazz代表的是枚举类  method是枚举类提供的获取方法 getCode获取枚举类中的code值
@EnumValid(clazz = TypeEnum.class,message = "类型不存在",method = "getCode")
private Integer type;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值