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安全错误
数据库的锁怎样保障安全
竞聘网络技术岗
如何查看服务器是否够用
我的世界手机服务器常用指令大全
吉利软件开发部是外包公司吗
软件开发个人工作室注册
dj数据库过滤教程
数据库具有三个特点是什么
县民政局网络安全应急预案
数据库时间段怎么写
加强大学生网络安全教育的原因
rd530服务器系统安装
手动安装数据库连接
城关分局网络安全
腾讯云刚买的服务器被墙
健身房管理软件开发公司
网络技术提取数据
南通品牌网络技术有哪些
数据库拍照在哪里找
东莞供应链软件开发定制
软件开发好学
面试软件开发时 问项目是
农科软件开发教学
网络技术与库存管理
微软 服务器管理软件
软件开发收入免征增值税吗
id云服务器
新诛仙手游pve服务器有哪些
sql数据库学习资料
软件开发部门问题反馈流程
通信软件开发设施创意