如何自定义Validator校验器

如何自定义Validator校验器,第1张

如何自定义Validator校验

如果需要自定义一个validator ,步骤如下:

1、编写一个自定义的校验注解,例如@ListValue(values={param1,param2...})。其作用是检验参数是否符合传入的参数。其代码如下,需要注意的有:

        1)有些注解存在于validation-api的包中,需要在项目中导入依赖;

        2)message的值参照validator源码中的命名格式,按照包名+注解名+message命名。


   javax.validation
   validation-api
   2.0.1.Final
/自定义校验的过程
@documented
@Constraint(validatedBy = {ListValueConstrainValidator.class})
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE,         
  ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ListValue {
    String message() default "{com.atguigu.common.valid.ListValue.message}";
    Class[] groups() default {};
    Class[] payload() default {};
    int[] vals() default {};
}
 

2、编写一个自定义的校验器,例如ListValueConstrainValidator。其中initialize方法是初始化方法,将需要用到的数据通过constraintAnnotation.values()方法传入,并放在合适的数据结构中。isValid()方法用于检测数据是否合法。

public class ListValueConstrainValidator implements ConstraintValidator {
    
    private Set set = new HashSet<>();
    //初始化方法
    @Override
    public void initialize(ListValue constraintAnnotation) {
        int[] vals = constraintAnnotation.vals();
        for (int val : vals) {
            set.add(val);
        }
    }

    
    @Override
    public boolean isValid(Integer value, ConstraintValidatorContext constraintValidatorContext) {
        return set.contains(value);
    }
}

3、配置ValidationMessages.properties文件,在里面配置上message的信息。

com.atguigu.common.valid.ListValue.message=必须是提交指定值

这里需要注意到是,如果idea没有设置encoding编码格式为UTF-8将会出现乱码,因此应当先调整编码格式,在file->settings->Editor->Code style->File Encodings将所有调成UTF-8,随后重启项目。

4、将注解写到字段上,例如这里设置为0和1,当参数检验到不是0和1时,将会返回“必须是提交指定值”。

@ListValue(vals = {0,1})
private Integer showStatus;

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5481119.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存