自定义数据校验的步骤

时间:2021-08-20 21:17:31   收藏:0   阅读:15

整体思路

1.创建自定义数据校验注解

思路:

1.引荐validation自带的@NotBlank注解。做出下面的自定义注解代码

@Documented
@Constraint(validatedBy = {ListValueConstraintValidator.class})
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
public @interface ListVals {
    
    // 默认的返回信息。也可以用message标签来自定义返回信息。
    // "{com.xue.common.valid.ListVals.message}"这个的意思是在该服务的配置文件中找这一途径的message属性
    String message() default "{com.xue.common.valid.ListVals.message}";

    // 分组
    Class<?>[] groups() default { };

    //负载
    Class<? extends Payload>[] payload() default { };
	// 定义了一个int数组,默认为空
    int[] vals() default {};
}

2.创建一个自定义的数据校验器

在notBlank注解里面的@Constraint注解中我们发现,

validateBy 后面所跟的类需要是继承了ConstraintValidator。而ConstraintValidator是一个接口

所以我们要写自定义的数据校验器就需要实现这个接口

技术分享图片

技术分享图片

技术分享图片

注意

public class ListValueConstraintValidator implements ConstraintValidator<ListVals,Integer> {
    //创建一个set集合,用于放置注解中设置的默认值
    HashSet<Integer> set = new HashSet<>();
    @Override
    public void initialize(ListVals constraintAnnotation) {
        //1.获取到 注解ListVals中设置的值,并放入set集合中
        int[] vals = constraintAnnotation.vals();

        // 遍历注解中的值,并放入set集合
        for (int val : vals) {
            set.add(val);
        }

    }

    // value:待校验的值
    @Override
    public boolean isValid(Integer value, ConstraintValidatorContext context) {

        return set.contains(value);
    }
}

3.关联数据校验注解和数据校验器

通过数据校验注解的@Constraint注解 绑定。

技术分享图片

原文:https://www.cnblogs.com/xuejun-blog/p/15167630.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!