欢迎您的访问
专注于分享最有价值的互联网技术干货

hibernate validation,spring validation自定义校验–只能为指定值

几个T的资料等你来白嫖
双倍快乐
一点要收藏这个宝藏网站防止丢失,资源帮找!!!

spring validation相关知识就不阐述,以下链接有详细阐述

使用spring validation完成数据后端校验

本文主要写关于validation自定义校验

项目有个需求:实体类的某个属性 必须验证为指定值,比如0,1等

20210802170344244.png

做法有2种:

1,使用validation @Pattern注解的正则表达式,本文主要讲自定义校验,在此就不多写。

2,自定义注解

一,第一步,创建自定义注解

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

    //默认错误消息
    String message() default "必须为指定值";

    String[] strValues() default {};

    int[] intValues() default {};

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

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

    //指定多个时使用
    @Target({FIELD, METHOD, PARAMETER, ANNOTATION_TYPE})
    @Retention(RUNTIME)
    @Documented
    @interface List {
        EnumValue[] value();
    }
}

strValues()和intValues()用于存注解上指定的值,

@Constraint注解上指定了EnumValueValidator类为具体实现类,

二,创建具体实现类EnumValueValidator,

public class EnumValueValidator implements  ConstraintValidator< EnumValue, Object>{

    private String[] strValues;
    private int[] intValues;

    @Override
    public void initialize(EnumValue constraintAnnotation) {
        strValues = constraintAnnotation.strValues();
        intValues = constraintAnnotation.intValues();
    }

    @Override
    public boolean isValid(Object value, ConstraintValidatorContext context ) {
        if(value instanceof String) {
            for (String s:strValues) {
                if(s.equals(value)){
                    return true;
                }
            }
        }else if(value instanceof Integer){
            for (int s:intValues) {
                if(s == value.intValue()){
                    return true;
                }
            }
        }
        return false;

    }

}

必须实现ConstraintValidator类,有2个方法initialize,isValid,

通过initialize方法获取注解上的值,通过isValid方法实现具体的验证,

isVali有2个入参Object value, ConstraintValidatorContext context,Object 为需要被验证的值。

编写完成后,自定义注解@EnumValue就可以在String和Integer类型的添加了

20210802170344508.png

参考

Annotation Validator中获取注解中和被注解属性的值

赞(0) 打赏
版权归原创作者所有,任何形式转载请联系我们:大白菜博客 » hibernate validation,spring validation自定义校验–只能为指定值

评论 抢沙发

8 + 8 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏