实现功能:自定义注解实现对信息封装类中的List集合中的元素信息校验,并支持通过注解属性指定是否允许集合为空。

自定义注解

@Target(FIELD)
@Retention(RUNTIME)
@Constraint(validatedBy = StringListValidator.class)
public @interface StringList {// 检验失败时的错误提示信息String message() default "字符串格式错误";// 集合为空时的错误提示信息String emptyMessage() default "集合不能为空";// 校验规则,支持正则表达式String regexp();// 集合是否可以为空,默认可以为空boolean allowEmpty() default true;Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};
}

自定义注解解析器

public class StringListValidator implements ConstraintValidator<StringList, List<String>> {private String regexp = "";private boolean allowEmpty;private String emptyMessage;/*** 初始化方法* @param constraintAnnotation*/@Overridepublic void initialize(StringList constraintAnnotation) {this.regexp = constraintAnnotation.regexp();this.emptyMessage = constraintAnnotation.emptyMessage();this.allowEmpty = constraintAnnotation.allowEmpty();}/*** 校验的方法* @param list* @param context* @return*/@Overridepublic boolean isValid(List<String> list, ConstraintValidatorContext context) {if(CollectionUtils.isEmpty(list)) {if(!allowEmpty) {// 必须禁用,不然返回的message信息会在message和emptyMessage之间切换context.disableDefaultConstraintViolation();             context.buildConstraintViolationWithTemplate(emptyMessage).addConstraintViolation();}return allowEmpty;}for(String str : list) {if(!str.matches(regexp)) {return false;}}return true;}
}

在封装类中使用注解

/*** 功能描述:删除学生信息的参数封装类*/
@Data
public class StudentDeleteReq {/*** 学生id集合* regexp: ids集合中元素校验的正则表达式,会对集合中的每个元素都进行正则表达式校验* allowEmpty:是否允许集合为空,默认允许为空,false表示不允许集合为空* message:ids中元素格式检验失败时的提示信息* emptyMessage:ids集合为空时的提示信息*/@StringList(regexp = "^[0-9]{1,20}$", allowEmpty = false, message = "id格式错误", emptyMessage = "id不能为空")private List<String> ids;
}

在Controller中添加检验注解

/*** 删除学生信息,支持单个删除和批量删除** @param deleteReq 信息封装类* @return 操作结果*/
@PostMapping("/delete")
public Result delete(@Valid @RequestBody StudentDeleteReq deleteReq) {// 业务代码。。。。
}

测试

集合为空时的校验错误信息:

集合中元素格式错误时的错误信息:

自定义注解校验List集合数据相关推荐

  1. java中注解动态传参_Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)...

    Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)java 前言:因为前段时间忙于写接口,在接口中须要作不少的参数校验,本着简洁.高效的原则,便写了这个小工具供本身使 ...

  2. 基于自定义注解校验入参Model中的必传字段

    文章目录 一.概述 二.实现细节 1. 自定义注解 2. 工具类 3. Aop 三.使用方法 1. 定义Aop 2. Model中标识必传字段和嵌套Model 3. Controller层添加自定义注 ...

  3. java 自定义注解 校验经纬度

    在日常的开发中可能会对手机号.邮箱.身份证号.经纬度的合法性进行校验,然而每次使用if语句调用校验函数进行校验又显得过于麻烦,这时候自定义校验注解用处就很大了. 1.需要的依赖 <!-- hib ...

  4. SpringBoot系列之使用自定义注解校验用户是否登录

    记得今年年初刚开始面试的时候,被问的最多的就是你知道Spring的两大核心嘛?那你说说什么是AOP,什么是IOC?我相信你可能也被问了很多次了. 1.到底是什么是AOP? 所谓AOP也就是面向切面编程 ...

  5. 自定义Valid注解,校验List集合

    List校验,使用原生@Size即可实现,下诉只是范例 自定义注解 @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @ ...

  6. 自定义注解实现RBAC权限校验,不要再说你不会了

    目录 1.前言 2.实现思路 3.编码实战 3.1.准备 3.2.数据库表准备 3.3.自定义注解 3.4.拦截器 3.5.接口使用 3.6.测试 3.7.结论 4.结束语 1.前言 学过Spring ...

  7. 自定义注解导出excel数据

    自定义注解导出excel数据 利用自定义注解方式,对数据列表进行简单的导出操作.即在实体对象的属性域上添加导出标识的注解,在对实体进行导出时,利用自定义注解进行反射的方法,获取实体需要导出的属性及值. ...

  8. 【SpringBoot】66、SpringBoot使用自定义注解实现返回数据脱敏操作

    在实际项目中,对于敏感数据的保护显得十分重要,数据脱敏又称数据去隐私化或数据变形,是在给定的规则.策略下对敏感数据进行变换.修改的技术机制,能够在很大程度上解决敏感数据在非可信环境中使用的问题. 本文 ...

  9. WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇)

    [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]在.NET中,所有的集合都实现了IEnumerable接口,比如Arra ...

最新文章

  1. 2022-2028年中国汽车橡胶件行业市场调查研究及前瞻分析报告
  2. Caffe 运行平台支持DenseNet模型
  3. 人工智能即将冲击与改变现有的医疗方式
  4. java script console_JS调试之console.log()作用与用法
  5. 《编译与反编译技术》——第一章 引论 1.1节编译器与解释器
  6. pict 手册_zbrush中文手册.pdf
  7. OpecCV颜色分割
  8. mysql 默认事务隔离级别_详解MySQL事务的四大特性和隔离级别
  9. echarts 图例太多放不下怎么办_如何选择合脚的篮球鞋?篮球鞋不合脚怎么办?...
  10. JS编辑器获取选择内容的HTML多浏览器兼容性写法(支持Chorme、Firefox)
  11. java.lang.IllegalArgumentException: Request header is too large的解决方法
  12. 【框架----Dubbo】基于开源Dubbo分布式RPC服务框架的部署整合
  13. tracert 原理
  14. 计算机x4,嵌入式计算机的PCIex4保持高容量和快速数据传输的方法
  15. 2020 — 只争朝夕,不负韶华
  16. DC算法竞赛——员工离职预测
  17. Make it Divisible by 25
  18. 2022年秋招提前批总结(海尔智家)
  19. BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 概率与期望+高斯消元
  20. ubuntu18.04安装caffe-cpu版

热门文章

  1. 视频编解码——编码流程介绍
  2. 深度学习的下一个十年,延展基础科学研究变革的「角力场」
  3. 红米2电信 android go,超能玩手机:如何让红米2电信版正确支持“全网通”?
  4. 红米note9 android10,红米note9尺寸大小_红米note9手机尺寸
  5. 带你了解NLP的词嵌入
  6. html诗集代码简单,自制简单的诗歌搜索系统
  7. 厉害|百度28位离职技术大牛和他们创建的AI公司!
  8. SQL语句的一个面试题目
  9. windows 的cmd设置代理方法
  10. JS去除字符串中间多余空格