当前位置: 首页 > news >正文

简化excel校验提高开发效率

业务背景:上传excel文件进行基础数据校验,然而东西太多写着写着就...自然成了测试的KPI了

解决思路:使用现有的注解处理,原理使用@validate注解原理

直接上干货,一行代码搞定校验:

ValidateUtils.validate(List.of(fieldReq));

目录

工具类

测试实体


工具类

import jakarta.annotation.Resource;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validator;
import org.springframework.stereotype.Component;import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;/*** date:2025/4/23 22:56* author: haohaounique@163.com*/
@Component
public class ValidateUtils {public static final String TIP = "第%s行数据异常,%s,请检查";//注意jdk版本不同引入的包不同//import jakarta.validation.Validator;//import javax.validation.Validator;private static Validator validator;public Validator getValidator() {return validator;}@Resourcepublic void setValidator(Validator validator) {ValidateUtils.validator = validator;}//默认从第1行开始 index=1public static <T> void validate(List<T> list) {if (Objects.isNull(list) || list.isEmpty()) {return;}AtomicInteger atomicInteger = new AtomicInteger(0);for (T t : list) {int lineNo = atomicInteger.addAndGet(1);Set<ConstraintViolation<T>> validate = validator.validate(t);if (!validate.isEmpty()) {//可自定义throw new IllegalArgumentException(String.format(TIP,lineNo,validate.iterator().next().getMessage()));}}}//指定起始行号public static <T> void validate(List<T> list,Integer startIndex) {if (Objects.isNull(list) || list.isEmpty()) {return;}if (startIndex==null || startIndex<0) {startIndex = 0;}AtomicInteger atomicInteger = new AtomicInteger(startIndex);for (T t : list) {int lineNo = atomicInteger.addAndGet(1);Set<ConstraintViolation<T>> validate = validator.validate(t);if (!validate.isEmpty()) {//可自定义throw new IllegalArgumentException(String.format(TIP,lineNo,validate.iterator().next().getMessage()));}}}
}

测试实体

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;/*** date:2025/3/16 9:33* author: haohaounique@163.com*/
@Data
@Schema(description = "规则配置添加请求")
public class RuleConfigAddReq {/*** 规则KEY*/@Schema(description = "规则KEY",requiredMode = Schema.RequiredMode.REQUIRED)@NotBlank(message = "规则KEY不能为空")private String ruleKey;/*** 字段名称*/@Schema(description = "字段名称")@NotBlank(message = "字段名称不能为空")private String fieldName;/*** 字段描述*/@Schema(description = "字段描述")@NotBlank(message = "字段描述不能为空")private String fieldDescription;/*** 类名*/@Schema(description = "类名")@NotBlank(message = "类名不能为空")private String className;/*** 类描述*/@Schema(description = "类描述")@NotBlank(message = "类描述不能为空")private String classDescription;/*** 表达式*/@Schema(description = "表达式")@NotBlank(message = "表达式不能为空")private String expression;/*** 顺序*/@Schema(description = "顺序")@NotNull(message = "顺序不能为空")private Integer ruleOrder;/*** 提示信息*/@Schema(description = "提示信息")@NotBlank(message = "提示信息编码不能为空")private String tipCode;/*** 提示信息*/@Schema(description = "提示信息")@NotBlank(message = "提示信息不能为空")private String tipMessage;
}

仿上传之后用easyexcel解析后生成的实体对象进行测试【此处省略上传解析,工具类待后续文章补充】

    @RequestMapping("/validate")public void validate() {RuleConfigAddReq ruleConfigAddReq = new RuleConfigAddReq();ruleConfigAddReq.setRuleKey("ruleKey");ruleConfigAddReq.setFieldName("fieldName");ruleConfigAddReq.setFieldDescription("fieldDescription");ruleConfigAddReq.setClassName("className");ruleConfigAddReq.setClassDescription("classDescription");ruleConfigAddReq.setExpression("expression");ruleConfigAddReq.setRuleOrder(1);FieldReq fieldReq = new FieldReq();//ValidateUtils.validate(List.of(fieldReq));}

相关文章:

  • deepseek海思SD3403边缘计算AI产品系统
  • 快速了解Go+微服务(概念和一个例子)
  • Windows7升级PowerShell到5.1
  • Nginx 核心功能与 LNMP 架构部署
  • socket套接字-UDP(下)
  • Windows权限与icacls命令详解
  • Latex全面汇总
  • Express 文件上传不迷路:req.files 一次性讲明白
  • 如何在本地部署小智服务器:从源码到全模块运行的详细步骤
  • 桂链:使用Fabric的测试网络
  • 单链表详解
  • css3伸缩盒模型第一章(主轴以及伸缩盒模型)
  • 单片机-89C51部分:9、串行口通讯
  • Gitea windows服务注册,服务启动、停止、重启脚本
  • MySQL慢查询日志分析方法
  • BLE技术,如何高效赋能IoT短距无线通信?
  • 应用安全系列之四十七:NoSQL注入
  • 14.外观模式:思考与解读
  • IoTDB数据库建模与资源优化指南
  • 从拒绝采样到强化学习,大语言模型推理极简新路径!
  • 临港迎来鸿蒙智行“尚界”整车及电池配套项目,首款车型今秋上市
  • A股三大股指小幅低收:电力股大幅调整,两市成交10221亿元
  • 新疆维吾尔自治区原质量技术监督局局长刘新胜接受审查调查
  • 金融街:去年净亏损约110亿元,今年努力实现经营稳健和财务安全
  • 从咖啡节到话剧、演唱会,上海虹口“文旅商体展”联动促消费
  • 特朗普的百日执政支持率与他“一税解千愁”的世界观和方法论