zoukankan      html  css  js  c++  java
  • 谷粒商城学习——P69 JSR303自定义校验注解

    1,编写一个自定义校验注解ListValue

    package com.atguigu.common.valid;
    
    import javax.validation.Constraint;
    import javax.validation.Payload;
    import java.lang.annotation.Documented;
    import java.lang.annotation.Retention;
    import java.lang.annotation.Target;
    
    import static java.lang.annotation.ElementType.*;
    import static java.lang.annotation.ElementType.TYPE_USE;
    import static java.lang.annotation.RetentionPolicy.RUNTIME;
    
    /**
     * @Description: 自定义校验注解
     * @Author: zyn
     * @Date: 2021-7-2
     */
    @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
    @Retention(RUNTIME)
    @Documented
    @Constraint(validatedBy = {ListValueConstraintValidator.class })//指定自定义校验器
    public @interface ListValue {
        String message() default "{com.atguigu.common.valid.ListVal.message}";
    
        Class<?>[] groups() default { };
    
        Class<? extends Payload>[] payload() default { };
        int[] vals();
    }
    View Code

    建ValidationMessages.proerties文件,配置ListValue中的指定的message

    com.atguigu.common.valid.ListVal.message=必须提交指定的值
    此处有个坑,坑了我一个多小时,.proerties属性值取出来一直乱码,最后看了@一篇文章给了思路,删除重建好了(并没有像文中那样单独指定properties文件编码)

    2,编写一个自定义校验器

    判断校验是否成功

    package com.atguigu.common.valid;
    
    
    import javax.validation.ConstraintValidator;
    import javax.validation.ConstraintValidatorContext;
    import java.util.HashSet;
    import java.util.Set;
    
    /**
     * @Description: 自定義校验注解.
     * @Author: zyn
     * @Date: 2021-7-2
     */
    //ConstraintValidator 接收两个
    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);
            }
        }
    
        //判断是否校验成功
        /**
         * @Description:
         * @Author: zyn
         * @Date: 2021-7-5
         * @param value 标注校验注解属性的传过来的值,需要校验的值
         */
        @Override
        public boolean isValid(Integer value, ConstraintValidatorContext context) {
            return set.contains(value);
        }
    }
    View Code

    3,关联自定义校验器和自定义校验注解

    主要是校验注解中Constraint validatedBy指定自定义校验器,在步骤1代码中已呈现

    实体类需要校验的字段标注步骤1的自定义校验注解

        @ListValue(vals={0,1},groups = AddGroup.class)
        private Integer showStatus;
  • 相关阅读:
    SpringMVC什么时候配置 视图解析器
    打印数组的5种方式
    集合区别(list和linkedlist的区别)?
    回归测试
    dom4j组装xml 以及解析xml
    java操作文件创建、删除
    powerdesigner里的table背景色是不是可以修改的?
    如何设定editplus为txt默认打开程序?
    PowerDesigner怎样才能在修改表的字段Name的时候Code不自动跟着变
    PowerDesigner怎么调出工具箱?
  • 原文地址:https://www.cnblogs.com/yanan7890/p/14974208.html
Copyright © 2011-2022 走看看