实现功能:自定义注解实现对信息封装类中的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. Redis5.0:这些场景下使用,高效还降低成本!
  2. TF之AutoML之AdaNet框架:AdaNet框架的简介、特点、使用方法详细攻略
  3. Java常见的面试题(一)
  4. xp系统开机自检很久_电脑开机不能自检的五大原因
  5. json pandas 内存溢出_pandas中的常用函数
  6. arcpy 验证中心点是否位于图层之内
  7. java文件删除操作_Java文件复制删除操作合集
  8. STM32F1下载程序方法
  9. ascii码二进制十进制十六进制对照表
  10. 《生成式深度学习》Generative Deeping Learning 笔记 第二章 深度学习
  11. 信号完整性测试入门——SECOND
  12. 阿里云邮箱企业版使用 SSL 加密协议登录邮箱
  13. 模拟一个简单的购房商贷月供计算器,按照总利息和每月还款金额
  14. python爬取音乐网站排行榜_使用Python抓取Web端QQ音乐排行榜 批量下载QQ音乐到本地...
  15. 【基于Python的Selenium2自动化测试】04 - 模拟126邮箱的登录
  16. python 中文分词工具
  17. java utf 8_java utf-8 乱码的解决方法
  18. 三大数据库分页功能JDBC实现操作
  19. 草柴返利APP:淘宝天猫满减店铺优惠券领取入口怎么免费领淘宝天猫粉丝福利购大额内部隐藏优惠券?
  20. 一步步读懂Pytorch Chatbot Tutorial代码(二) - 数据处理

热门文章

  1. centos7.4和ubuntu16.0.4常用命令
  2. WebRTC Simulcast测试--用Janus
  3. module.exports 与 exports.xxx 的区别
  4. java过滤器filter过滤相同url时的执行顺序
  5. codeforces1367D 思维模拟
  6. EOS区块链浏览器:scaneos.io | EOS必备工具 |什么是区块链浏览器 | 怎么使用区块链浏览器
  7. 工业交换机冗余什么意思?
  8. 梦幻默认服务器文件夹修改器,【梦幻仙境V3.96服务端】梦幻最新完美开心版带存档与修改器时代梦幻最新5.2版本...
  9. 写给通信人的“失业”生存指南
  10. 海思3516开发记录-AAC音频解码