Java对象数据校验工具类VerifyUtils怎么实现
发表于:2024-12-02 作者:千家信息网编辑
千家信息网最后更新 2024年12月02日,本篇内容介绍了"Java对象数据校验工具类VerifyUtils怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅
千家信息网最后更新 2024年12月02日Java对象数据校验工具类VerifyUtils怎么实现
本篇内容介绍了"Java对象数据校验工具类VerifyUtils怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
背景介绍
Excel数据导入是很常见的功能,可很多时候客户导入的数据未必能入库,比如字段超长,类型错误……等。在产品经理提出要做数据校验的时候你难道要一个字段一个字段去校验?而且系统有几十张表都需要类似的功能,更何况客户导入的数据成千上万条数据,如果每次提示某个字段错误肯定是不友好的。要求是提示excel某行某些字段发生了什么错误。
1.注解类
import java.lang.annotation.*;/** * @author 郏高阳 * @date 2020/9/2 * @jdk.version 1.8 * @desc javaBean校验注解 */@Target({ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface Verify { /** * 字段名称 * @return */ String name() default ""; /** * 最大长度 0不校验大于0才生效 * @return */ int maxLength() default 0; /** * 必填 * @return */ boolean required() default false; /** * 是否包含特殊字符 * @return */ boolean specialCharacters() default false; /** * 数字验证 * @return */ boolean number() default false; /** * 正则 * @return */ Regexp regexp() default @Regexp();}
/** * @author 郏高阳 * @date 2020/9/2 * @jdk.version 1.8 * @desc 用于校验正则注解类 */public @interface Regexp { String regexp() default ""; String message() default "";}
2.校验工具类
import cn.hutool.core.util.NumberUtil;import cn.hutool.core.util.ReUtil;import cn.hutool.core.util.ReflectUtil;import org.apache.commons.lang3.StringUtils;import java.lang.reflect.Field;import java.util.ArrayList;import java.util.List;/** * @author 郏高阳 * @Type VerifyUtils.java * @date 2020/9/2 * @jdk.version 1.8 * @desc javaBean校验工具类 *///@Verify(maxLength = 10, required = true, number = true)//private String f32;//@Verify(regexp = @Regexp(regexp = "\\w+[\u4E00-\u9FFF]+\\d+", message = "正则不匹配"), specialCharacters = true)//private String f33;public class VerifyUtils { /** * 校验对象 * * @param obj 对象 * @return 错误信息 */ public static Listverify(Object obj) { List stringList = new ArrayList<>(); Field[] fields = obj.getClass().getDeclaredFields(); for (Field f : fields) { if (f.isAnnotationPresent(Verify.class)) { StringBuilder stringBuilder = new StringBuilder(); Verify verify = f.getAnnotation(Verify.class); Object object = ReflectUtil.getFieldValue(obj, f.getName()); String value = null; if (object != null) value = object.toString(); if (verify.required()) { if (StringUtils.isBlank(value)) { stringBuilder.append("字段不能为空|"); } } if (StringUtils.isNotBlank(value)) { if (verify.specialCharacters()) { if (value.contains("|") || value.contains("'") || value.indexOf('"') > -1) { stringBuilder.append("包含非法字符|"); } if (value.length() != value.trim().length()) { stringBuilder.append("前后不能包含空格|"); } } if (verify.maxLength() > 0) { if (value.length() > verify.maxLength()) { stringBuilder.append("内容长度超长|"); } } if (verify.number()) { if (!NumberUtil.isNumber(value)) { stringBuilder.append("不是数字类型|"); } } Regexp regexp = verify.regexp(); if (StringUtils.isNotBlank(regexp.regexp())) { boolean isMatch = ReUtil.isMatch(regexp.regexp(), value); if (!isMatch) { stringBuilder.append(regexp.message()).append("|"); } } } if (StringUtils.isNotBlank(stringBuilder.toString())) { String name = verify.name(); if (StringUtils.isBlank(name)) { name = f.getName(); } String message = name + ":" + stringBuilder.substring(0, stringBuilder.toString().length() - 1); stringList.add(message); } } } return stringList; }}
3.测试
目前只做了非空,类型,长度,特殊字符,目前实现的仅仅是为了符合公司业务需要,有需要可自行修改完善
"Java对象数据校验工具类VerifyUtils怎么实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
数据
字段
对象
工具
错误
内容
字符
正则
注解
类型
长度
高阳
特殊
功能
客户
数字
时候
更多
知识
提示
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
2016主要网络安全事件
网络安全工作适合女生吗
厦门医疗软件开发
目录是一个 数据库文件
数据库and or用法
惠山区定制软件开发商店
电脑的时间同步服务器怎么设置
家里搭建服务器私网怎么访问
色弱能做软件开发吗
东营银行的软件开发
瘟疫之心护腿六零数据库
网络技术工作述职报告
DNS服务器配置管理报告
数据库所有表都卡解决不了
杭州数据库专用鞋套机
软件开发作用
数据库产品购销网站课程设计
软件开发项目的环境影响评估
网络技术画板
商汤科技产业互联网
centos视频服务器
新罗警校网络安全
南京中储智运软件开发
无锡海鲜配送软件开发
vb登录验证密码与数据库
深圳南湾服务器托管
邢台学院计算机网络技术专业
九品小县令软件开发者
网络安全薪资一般多少
小程序开发腾讯云数据库