首页 > 其他分享 >自定义注解@ValidValueList

自定义注解@ValidValueList

时间:2023-09-18 15:12:39浏览次数:45  
标签:validValues return String 自定义 value 注解 ValidValueList

1、自定义注解 @ValidValueList 和验证器 ValidValueListValidator 来确保集合中的元素必须是在指定的值列表中。

2、注解 @ValidValueList 允许你在字段或参数上标记一个集合,并为其提供一组有效的值。验证器 ValidValueListValidator 则用于检查集合中的元素是否都在指定的值列表中。

代码实现:

@Target({FIELD, PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = ValidValueListValidator.class)
public @interface ValidValueList {

String[] value() default { };

String message() default "invalid value";

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

Class<? extends Payload>[] payload() default { };
}

 验证器类:

public class ValidValueListValidator implements ConstraintValidator<ValidValueList, Collection<String>> {

    private String[] validValues;

    @Override
    public void initialize(ValidValueList constraintAnnotation) {
        validValues = constraintAnnotation.value();
    }

    @Override
    public boolean isValid(Collection<String> value, ConstraintValidatorContext context) {
        //允许空集合
        if (value == null){
            return true;
        }
        //使用Stream遍历集合中的每个元素,验证是否在允许的参数值列表中
        boolean allValid = value.stream().allMatch(item -> item != null && containsIgnoreCase(item, validValues));
        return allValid;
    }

    private boolean containsIgnoreCase(String value, String[] validValues) {
        //检查是否包含在允许的参数值列表中
        for (String validValue : validValues){
            if (validValue.equals(value)){
                return true;
            }
        }
        return false;
    }
}

示例:

@ValidValueList(message = "输入参数不在值列表中", value = {"MAX", "MIN", "FIRST", "LATEST"})
private List<String> reportInfo;

 注意:需要在Controller加上@Valid注解!多层对象嵌套也需要逐层添加@Valid注解!

标签:validValues,return,String,自定义,value,注解,ValidValueList
From: https://www.cnblogs.com/xiaogh/p/17711860.html

相关文章

  • 2023-09-18 hexo博客之如何自定义页面内容宽度==》在custom.styl中添加两行代码即可
    前言:我的hexo主题为hexo-theme-next 5.1.4版本。操作如下:打开你的博客名称\themes\hexo-theme-next\source\css\_variables,找到这个文件custom.styl,然后把下面代码添加进去:$main-desktop=1200px$content-desktop=1000px刷新页面即可见效。......
  • EasyCode自定义模板
    一、前言最近做了几个傻瓜式的CRUD模块,光调整EasyCode生成的代码格式就调整了半天,毫无意义,但又必不可少。于是,网上找了关于EasyCode自定义模板的文章,尝试自定义模板,从根本上解决代码格式调整的痛点。EasyCode是IDEA开发的一个代码生成插件,主要通过自定义模板(基......
  • vue 自定义全局弹窗组件
    问题描述:vue自定义类似elementUI的this.$confirm解决方案:通过vue的extend方法实现然后全局注入 代码实现: 展示的组件(就是最基本的vue组件代码)<!--*@Author:linchunlinchun*@Date:2023-09-1810:14:24*@LastEditors:linchunlinchun*@LastEdit......
  • Springboot简单功能示例-4 自定义加密进行登录验证
    springboot-sample介绍springboot简单示例-自定义加密进行登录验证跳转到发行版软件架构(当前发行版)Springboot3.1.3hutoolbcprov-jdk18on安装教程gitclone--branch自定义加密进行登录验证[email protected]:simen_net/springboot-sample.git主要功能使用SM2库......
  • Java注解
    声明:本文记录基于JDK8(8u211)的注解使用规则,若存在错误,请发邮件至[email protected]联系我创作时间:2023-09-1510:07:01创作情况:失业第45天,地处成都金牛区创作者:一口吃不成胖子格式如下@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public@interfac......
  • 自定义Feign的配置
        ......
  • destoon添加自定义字段报错INSERT INTO [pre]fields
     今天做destoon开发时候在后台添加自定义字段时候出现:destoon7.0-8.0添加自定义字段报错MySQLQuery:INSERTINTO[pre]fields(tb,name,title,note,type,length,html,default_value,option_value,width,height,input_limit,addition,search,display,front)VALUES('article_21',......
  • 使用Python的requests库自定义请求
    importrequestsfromrequestsimportRequest,Sessionurl="http://challenge-d590d34746e26bc5.sandbox.ctfhub.com:10800/index.php"headers={"user-agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,lik......
  • Java的常用@SuppressWarnings注解
    总所周知,IDE经常会提示一些警告,通常使用@SuppressWarnings注解来忽略虽然这样做并不是很推荐,但对于一些不想改动的代码还是需要的,所以在这里做个我常用的记录值备注ResultOfMethodCallIgnored返回值忽略unused未使用的变量DuplicatedCode重复的代码uncheck......
  • 统信服务器1050a自定义镜像制作02
    原文链接:统信服务器1050a自定义镜像制作02hello,大家晚上好啊,今天为大家带来如何制作统信uos服务器操作系统1050a的第二篇文章,基于centos8自定义ISO镜像来学习相对来说是比较快的,今天介绍第二种方法,如何为标准ISO镜像中增加新的rpm包,并在安装系统dde桌面的时候进行安装,操作相对来说......