• 谷粒商城品牌管理校验(十一)


    69、商品服务-API-品牌管理-JSR303自定义校验注解

    JSR 303 自定义校验注解

    (1)为什么使用自定义校验注解?
      上面的注解满足不了业务需求时,可以自定义校验注解,自定义校验规则。

    (2)步骤:
    Step1:
      需要自定义一个校验注解。
      可以创建一个 ValidationMessages.properties 用于保存默认的 message 信息。

    Step2:
      需要自定义一个校验器,即自定义校验规则。
      实现 ConstraintValidator 接口,并重写相关方法。
    注:
      initialize 方法用于初始化,可以获取 自定义的属性的值。
      isValid 方法用于校验,可以获取到实际的值,然后与自定义的属性值进行比较。

    Step3:
      将校验注解 与 校验器 关联起来。
      @Constraint(validatedBy = {TestValidConstraintValidator.class})

    (3)使用:
      如下例,自定义一个校验规则,判断数据长度是否合法。
      默认为 String 属性,当 String 为 Null 或者 长度大于 5 时,校验不通过。
      可以自定义 长度。
    Step1:
      自定义一个校验注解,@ListValue,用于判断是否指定的值。

    /**
     * @author WGR
     * @create 2020/6/1 -- 21:34
     */
    @Documented
    @Constraint(validatedBy = { ListValueConstraintValidator.class })
    @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
    @Retention(RUNTIME)
    public @interface ListValue {
        String message() default "{com.dalianpai.common.valid.ListValue.message}";
    
        Class<?>[] groups() default { };
    
        Class<? extends Payload>[] payload() default { };
    
        int[] vals() default { };
    }

    配置文件内容:

    Step2:
      自定义一个校验器ListValueConstraintValidator, 用于检测值是否合法。

    /**
     * @author WGR
     * @create 2020/6/1 -- 21:35
     */
    public class ListValueConstraintValidator implements ConstraintValidator<ListValue,Integer> {
    
        private Set<Integer> set = new HashSet<>();
        //初始化方法
        @Override
        public void initialize(ListValue constraintAnnotation) {
    
            int[] vals = constraintAnnotation.vals();
            for (int val : vals) {
                set.add(val);
            }
    
        }
    
        //判断是否校验成功
    
        /**
         *
         * @param value 需要校验的值
         * @param context
         * @return
         */
        @Override
        public boolean isValid(Integer value, ConstraintValidatorContext context) {
    
            return set.contains(value);
        }
    }

    Step3:
      使用注解。

    使用 Postman 测试。

  • 相关阅读:
    java降序排列
    冒泡排序-java
    redis-并发竞争问题
    超卖问题
    算法-题目汇总-6
    算法-题目汇总-4
    算法-题目汇总-1
    算法-二分查找-1
    算法-bst-平衡搜索二叉树-1
    算法-位运算-1
  • 原文地址:https://www.cnblogs.com/dalianpai/p/13027642.html
Copyright © 2020-2023  润新知