自定义注解校验List集合数据
实现功能:自定义注解实现对信息封装类中的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集合数据相关推荐
- java中注解动态传参_Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)...
Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)java 前言:因为前段时间忙于写接口,在接口中须要作不少的参数校验,本着简洁.高效的原则,便写了这个小工具供本身使 ...
- 基于自定义注解校验入参Model中的必传字段
文章目录 一.概述 二.实现细节 1. 自定义注解 2. 工具类 3. Aop 三.使用方法 1. 定义Aop 2. Model中标识必传字段和嵌套Model 3. Controller层添加自定义注 ...
- java 自定义注解 校验经纬度
在日常的开发中可能会对手机号.邮箱.身份证号.经纬度的合法性进行校验,然而每次使用if语句调用校验函数进行校验又显得过于麻烦,这时候自定义校验注解用处就很大了. 1.需要的依赖 <!-- hib ...
- SpringBoot系列之使用自定义注解校验用户是否登录
记得今年年初刚开始面试的时候,被问的最多的就是你知道Spring的两大核心嘛?那你说说什么是AOP,什么是IOC?我相信你可能也被问了很多次了. 1.到底是什么是AOP? 所谓AOP也就是面向切面编程 ...
- 自定义Valid注解,校验List集合
List校验,使用原生@Size即可实现,下诉只是范例 自定义注解 @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @ ...
- 自定义注解实现RBAC权限校验,不要再说你不会了
目录 1.前言 2.实现思路 3.编码实战 3.1.准备 3.2.数据库表准备 3.3.自定义注解 3.4.拦截器 3.5.接口使用 3.6.测试 3.7.结论 4.结束语 1.前言 学过Spring ...
- 自定义注解导出excel数据
自定义注解导出excel数据 利用自定义注解方式,对数据列表进行简单的导出操作.即在实体对象的属性域上添加导出标识的注解,在对实体进行导出时,利用自定义注解进行反射的方法,获取实体需要导出的属性及值. ...
- 【SpringBoot】66、SpringBoot使用自定义注解实现返回数据脱敏操作
在实际项目中,对于敏感数据的保护显得十分重要,数据脱敏又称数据去隐私化或数据变形,是在给定的规则.策略下对敏感数据进行变换.修改的技术机制,能够在很大程度上解决敏感数据在非可信环境中使用的问题. 本文 ...
- WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇)
[爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]在.NET中,所有的集合都实现了IEnumerable接口,比如Arra ...
最新文章
- 2022-2028年中国汽车橡胶件行业市场调查研究及前瞻分析报告
- Caffe 运行平台支持DenseNet模型
- 人工智能即将冲击与改变现有的医疗方式
- java script console_JS调试之console.log()作用与用法
- 《编译与反编译技术》——第一章 引论 1.1节编译器与解释器
- pict 手册_zbrush中文手册.pdf
- OpecCV颜色分割
- mysql 默认事务隔离级别_详解MySQL事务的四大特性和隔离级别
- echarts 图例太多放不下怎么办_如何选择合脚的篮球鞋?篮球鞋不合脚怎么办?...
- JS编辑器获取选择内容的HTML多浏览器兼容性写法(支持Chorme、Firefox)
- java.lang.IllegalArgumentException: Request header is too large的解决方法
- 【框架----Dubbo】基于开源Dubbo分布式RPC服务框架的部署整合
- tracert 原理
- 计算机x4,嵌入式计算机的PCIex4保持高容量和快速数据传输的方法
- 2020 — 只争朝夕,不负韶华
- DC算法竞赛——员工离职预测
- Make it Divisible by 25
- 2022年秋招提前批总结(海尔智家)
- BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 概率与期望+高斯消元
- ubuntu18.04安装caffe-cpu版