zoukankan      html  css  js  c++  java
  • 自定义校验功能

    场景:要校验showStatus的01状态,可以用正则,但我们可以利用其他方式解决复杂场景。比如我们想要下面的场景

    /**
    	 * 显示状态[0-不显示;1-显示]
    	 */
    @NotNull(groups = {AddGroup.class, UpdateStatusGroup.class})
    @ListValue(vals = {0,1}, groups = {AddGroup.class, UpdateGroup.class, UpdateStatusGroup.class})
    private Integer showStatus;
    

      添加依赖

    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>2.0.1.Final</version>
    </dependency>
    

      

    1、编写自定义的校验注解

    必须有3个属性

    • message()错误信息
    • groups()分组校验
    • payload()自定义负载信息
    @Documented
    @Constraint(validatedBy = { ListValueConstraintValidator.class})
    @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
    @Retention(RUNTIME)
    public @interface ListValue {
        // 使用该属性去Validation.properties中取
        String message() default "{com.atguigu.common.valid.ListValue.message}";
    
        Class<?>[] groups() default { };
    
        Class<? extends Payload>[] payload() default { };
    
        int[] value() default {};
    }
    
    该属性值取哪里取呢?
        common创建文件ValidationMessages.properties
        里面写上com.atguigu.common.valid.ListValue.message=必须提交指定的值 [0,1]
    

      

    2、编写自定义的校验器

    public class ListValueConstraintValidator implements ConstraintValidator<ListValue,Integer> {
        private Set<Integer> set=new HashSet<>();
        @Override
        public void initialize(ListValue constraintAnnotation) {
            int[] value = constraintAnnotation.value();
            for (int i : value) {
                set.add(i);
            }
    
        }
    
        @Override
        public boolean isValid(Integer value, ConstraintValidatorContext context) {
    
    
            return  set.contains(value);
        }
    }
    

      

    3、关联校验器和校验注解

    @Constraint(validatedBy = { ListValueConstraintValidator.class})
    

      一个校验注解可以匹配多个校验器

    4、使用实例

    /**
    	 * 显示状态[0-不显示;1-显示]
    	 */
    	@ListValue(value = {0,1},groups ={AddGroup.class})
    	private Integer showStatus;
    

      

  • 相关阅读:
    windows下Yarn安装与使用(两种方法)
    git配置公钥---解决码云出现git@gitee.com: Permission denied (publickey)
    npm使用国内镜像的两种方法
    【LeetCode】33. Search in Rotated Sorted Array (4 solutions)
    【LeetCode】83. Remove Duplicates from Sorted List
    【LeetCode】82. Remove Duplicates from Sorted List II
    【LeetCode】85. Maximal Rectangle
    【LeetCode】84. Largest Rectangle in Histogram
    【LeetCode】87. Scramble String
    【LeetCode】162. Find Peak Element (3 solutions)
  • 原文地址:https://www.cnblogs.com/vincentmax/p/14415513.html
Copyright © 2011-2022 走看看