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;
    

      

  • 相关阅读:
    codeforce1214E Petya and Construction Set
    codeforces1214D Treasure Island
    CCPC2019网络赛1002 array (主席树)
    POJ2442
    计算机网络-应用层(3)Email应用
    计算机网络-应用层(2)FTP协议
    计算机网络-应用层(1)Web应用与HTTP协议
    算法-排序(1)k路平衡归并与败者树
    算法-搜索(6)B树
    RSA加密算法和SSH远程连接服务器
  • 原文地址:https://www.cnblogs.com/vincentmax/p/14415513.html
Copyright © 2011-2022 走看看