Java对象数据校验工具类VerifyUtils怎么实现
发表于:2024-10-24 作者:千家信息网编辑
千家信息网最后更新 2024年10月24日,本篇内容介绍了"Java对象数据校验工具类VerifyUtils怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅
千家信息网最后更新 2024年10月24日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安全错误
数据库的锁怎样保障安全
本地服务器没有域名
中国能用的交友软件开发
nas 设置tcp测试服务器
积极参加网络安全知识竞赛
微软地图 软件开发
ncre网络安全技术难不难
生产实习心得软件开发
java数据库事务回滚操作
查询数据库权限oracle
将数据库数据仓库等
国家安全可控服务器目录
163 发送服务器
为什么acdsee打不开数据库
软件开发大概要多少钱呀
如东县软件开发培训机构
大学生网络安全宣传周文稿
软件开发征信接口费用
武汉紫霞网络技术公司
世界银行政治制度数据库
王者荣耀网络安全法的内容
音频端点服务器
ppt网络安全素材
传奇单机版装备数据库英文翻译
英雄联盟重新连接服务器失败
幼儿园向家长宣传网络安全的活动
国内网络安全事件都反馈给谁
上海专业软件开发企业
新荣耀服务器
如何进行计算机软件开发
体能测试系统数据库设计引言