java导入excel接口校验excel版本是否匹配

在业务开发中,一个功能有三四个版本的时候,对应的excel导入模板也是不同的,这个时候对于不同的导入接口就需要进行excel导入模板的校验。

1.思路

思想1:校验当前接口对应的dto字段列是否与当前excel对应的表头是否匹配。
思想2:模板中创建一个隐藏sheet,每次导入的时候读取隐藏sheet的sheet名
思想3:读取当前sheet的sheet名并比对该接口应该对应的sheet名

2.代码实现

2.1 校验excel表头代码

	// 判断双方的导入列是否一致。true一致,false不一致private static boolean verifyExcelVersion(Class clazz, Sheet sheet) {List<Field> fields = getImportFields(clazz);List<String> classFieldList = fields.stream().map(item -> {return item.getAnnotation(MyExcel.class).name();}).collect(Collectors.toList());Row headRow = sheet.getRow(0);int headRowCount = headRow.getLastCellNum() - headRow.getFirstCellNum();// 读取excel表头List<String> headStringList = new ArrayList<>();for (int c = 0; c < headRowCount; c++) {Cell cell = headRow.getCell(c);String excelVal = cell.getStringCellValue();headStringList.add(excelVal);}// 使用md5进行信息摘要加密,比对两方信息是否一致String excelHeadMd5 = DigestUtil.md5Hex(headStringList.toString());String classFieldMd5 = DigestUtil.md5Hex(classFieldList.toString());return StrUtil.equals(excelHeadMd5, classFieldMd5);}// 获取dto对应的导入列private static List<Field> getImportFields(Class clazz) {List<Field> collect = Arrays.stream(clazz.getDeclaredFields()).filter(field -> field.isAnnotationPresent(MyExcel.class)).sorted(Comparator.comparing(field -> field.getAnnotation(MyExcel.class).sort())).collect(Collectors.toList());return collect;}

引用代码

        boolean verifyExcelVersion = verifyExcelVersion(clazz, sheet);if (!verifyExcelVersion) {throw new RunTimeException("导入模板异常");}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/38487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++Primer Plus 第十四章代码重用:14.4.10 模板别名(C++11)

CPrimer Plus 第十四章代码重用&#xff1a;14.4.10 模板别名(C11) 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;CPrimer Plus 第十四章代码重用&#xff1a;14.4.10 模板别名(C11) 提示&#xff1a;写完文章后&am…

百事可乐推出具有视频屏幕和人工智能技术的智能罐头

在最近于法国戛纳举行的国际创意节上&#xff0c;百事公司推出了创新的智能罐头。这些罐头不同于传统产品&#xff0c;它们采用了环绕式3D屏幕&#xff0c;能够展示高清视频内容&#xff0c;为品牌宣传和促销带来了全新的视角。经过两年多的精心研发&#xff0c;这些智能罐成为…

Linux编程:通过flock实现文件锁

Linux(编程):多进程同步-文件锁_进程间文件锁-CSDN博客 除了fcntl方式的文件锁,linux还提供了另一个api flock,用于完成文件锁。 下面的代码对flock进行了封装: //file_lock.h #ifndef FILE_LOCK_H #define FILE_LOCK_H#include <sys/file.h> #include <sys/typ…

糟糕的管理者都有这几个特征

在我们的职业生涯中&#xff0c;我们都期望能遇到一位英明睿智、引领团队走向辉煌的管理者。然而&#xff0c;现实往往并非总是如此美好&#xff0c;总会有一些管理能力差的人混迹其中&#xff0c;给团队带来诸多困扰。今天&#xff0c;我们就来看看糟糕的管理者身上都有哪些特…

LLM原生开发路线图指南

引言 大型语言模型&#xff08;LLM&#xff09;正在迅速成为现代人工智能的基石。然而&#xff0c;目前还没有出现公认的最佳实践&#xff0c;而且先驱们往往没有明确的开发路线图。因此&#xff0c;这种状况急需要有人重新发明有关轮子&#xff1b;否则&#xff0c;将会使人陷…

【数论】欧拉函数

文章目录 定义性质求法分解质因数线性筛 定义 欧拉函数&#xff1a; φ ( n ) \varphi(n) φ(n) 表示小于等于 n 且与 n 互质的数的个数 性质 对于质数 n n n&#xff0c; φ ( n ) n − 1 \varphi(n)n-1 φ(n)n−1对于两个互质的正数 a 、 b a、b a、b&#xff0c;有 φ…

spring中集成mybatis,并测试是否成功

首先你要配置pom.xml <!-- 连接 MySQL 数据库的驱动程序 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency><!-- spring-jdbc -->&…

Advanced slides插件无法预览幻灯片

advanced-slides的官方地址&#xff1a; MSzturc/obsidian-advanced-slides: Create markdown-based reveal.js presentations in Obsidian (github.com) 官方教程和文档&#xff1a; Advanced Slides Documentation (mszturc.github.io) 中文版也有博客翻译了&#xff1a;Ob…

软考中级系统集成项目管理工程师备考笔记

目录 一&#xff0c;通用内容 &#xff08;一&#xff09;信息与信息化 1.1&#xff0c;信息 信息基本概念 信息的传输模型 信息的质量属性 1.2&#xff0c;信息系统 信息系统的基本概念 信息系统定义 信息系统集成 1.3&#xff0c;信息化 信息化层次 信息化的核心…

66、基于长短期记忆 (LSTM) 网络对序列数据进行分类

1、基于长短期记忆 (LSTM) 网络对序列数据进行分类的原理及流程 基于长短期记忆&#xff08;LSTM&#xff09;网络对序列数据进行分类是一种常见的深度学习任务&#xff0c;适用于处理具有时间或序列关系的数据。下面是在Matlab中使用LSTM网络对序列数据进行分类的基本原理和流…

AD20操作使用part1

AD20的使用 原理图库&#xff0c;也称为元件库。文件的后缀为 .SchLib。 原理图就是表示电路板上各器件之间连接原理的图表&#xff0c;原理图绘制的前提是拥有所需的原理图库。 PCB库&#xff0c;也称为封装库。文件的后缀为 .PcbLib &#xff0c;在该文件中可以画各个器件的封…

简单爬虫案例——爬取快手视频

网址&#xff1a;aHR0cHM6Ly93d3cua3VhaXNob3UuY29tL3NlYXJjaC92aWRlbz9zZWFyY2hLZXk9JUU2JThCJTg5JUU5JTlEJUEy 找到视频接口&#xff1a; 视频链接在photourl中 完整代码&#xff1a; import requestsimport re url https://www.kuaishou.com/graphql cookies {did: web_…

《数字图像处理与机器视觉》案例三 (基于数字图像处理的物料堆积角快速测量)

一、前言 物料堆积角是反映物料特性的重要参数&#xff0c;传统的测量方法将物料自然堆积&#xff0c;测量物料形成的圆锥表面与水平面的夹角即可&#xff0c;该方法检测效率低。随着数字成像设备的推广和应用&#xff0c;应用数字图像处理可以更准确更迅速地进行堆积角测量。 …

便携式气象站:科技助力,气象观测的新选择

在气象观测领域&#xff0c;便携式气象站不仅安装方便、操作简单&#xff0c;而且功能齐全、性能稳定&#xff0c;为气象观测带来了极大的便利。 首先&#xff0c;便携式气象站的便携性&#xff0c;与传统的气象站相比&#xff0c;它不需要复杂的安装过程和固定的设备基础&…

Visual Studio 设置回车代码补全

工具 -> 选项 -> 文本编辑器 -> C/C -> 高级 -> 主动提交成员列表 设置为TRUE

机器学习模型的训练过程和预测过程,用太上老君炼丹炉和孙悟空进行比喻--九五小庞

训练过程&#xff1a;太上老君炼丹 在古老的传说中&#xff0c;太上老君是一位擅长炼丹的神仙。他将各种珍贵的草药、矿石放入炼丹炉中&#xff0c;经过长时间的高温炼制&#xff0c;最终炼出神奇的丹药。这个过程与机器学习模型的训练过程有着惊人的相似之处。 收集原料&…

Batch脚本中的用户交互:CHOICE命令的妙用

Batch脚本中的用户交互&#xff1a;CHOICE命令的妙用 在自动化脚本的世界中&#xff0c;Batch文件以其简洁和高效而著称&#xff0c;但有时我们也需要与用户进行交互以获取输入或提供选择。这就是CHOICE命令大放异彩的地方。本文将深入探讨如何在Batch文件中使用CHOICE命令&am…

从实验室走向商业化,人形机器人时代要来了?

从国内市场看&#xff0c;据机构报告显示&#xff0c;预计到2026年中国人形机器人产业规模将突破200亿元。特别是在生成式AI技术大爆发的当下&#xff0c;未来人形机器人更是极有可能实现超预期增长。 近日&#xff0c;特斯拉CEO埃隆马斯克(Elon Musk)在特斯拉2024年股东大会上…

【Unity设计模式】✨使用 MVC 和 MVP 编程模式

前言 最近在学习Unity游戏设计模式&#xff0c;看到两本比较适合入门的书&#xff0c;一本是unity官方的 《Level up your programming with game programming patterns》 ,另一本是 《游戏编程模式》 这两本书介绍了大部分会使用到的设计模式&#xff0c;因此很值得学习 本…

System.currentTimeMillis() JAVA 转C#

JAVA中的System.currentTimeMillis() &#xff0c;指获取当前时间与1970年1月1日00:00:00 GMT之间所差的毫秒数的方法。 这个方法返回的是一个long类型的值&#xff0c;表示从某个固定时间点&#xff08;通常是UNIX纪元&#xff0c;即1970年1月1日00:00:00 GMT&#xff09;到…