• 自定义校验功能


    场景:要校验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;
    

      

  • 相关阅读:
    78. Subsets
    93. Restore IP Addresses
    71. Simplify Path
    82. Remove Duplicates from Sorted List II
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    312. Burst Balloons
    程序员社交平台
    APP Store开发指南
    iOS框架搭建(MVC,自定义TabBar)--微博搭建为例
  • 原文地址:https://www.cnblogs.com/vincentmax/p/14415513.html
Copyright © 2020-2023  润新知