使用EasyExcel导入结合validation参数校验
1、创建一个Excel模板2、根据模板创建对应的实体类并在属性上加上校验Data AllArgsConstructor NoArgsConstructor public class Person implements Serializable { private Integer id; ExcelProperty(姓名) NotNull(message 姓名不能为空) private String name; ExcelProperty(年龄) NotNull(message 年龄不能为空) Min(value 0, message 年龄不能小于0) Max(value 100, message 年龄不能大于100) private Integer age; NotNull(message 性别不能为空) ExcelProperty(性别) private String sex; }3、定义一个通用的监听器(EasyExcel内置的监听器)Slf4j //通用Excel监听器 AllArgsConstructor public class CommonExcelListenerT extends AnalysisEventListenerT { //借助validator对象手动校验 private final Validator validator; //用于限定导入数据的行数 private final int maxRows 2000; // 存储校验通过的数据 private final ListT validDataList new ArrayList(); // 存储错误信息 private final ListString errorMessages new ArrayList(); public CommonExcelListener(Validator validator) { this.validator validator; } // 记录已处理的行数用于限制 private int rowCount 0; //每读一行数据都会执行这个方法 Override public void invoke(T data, AnalysisContext context) { // 检查是否超过最大行数限制 if (rowCount maxRows) { throw MyException.myException(HttpStatus.HTTP_BAD_REQUEST, Excel数据行数超过限制(最多 maxRows 行)); } //校验数据 SetConstraintViolationT violations validator.validate(data); if (!violations.isEmpty()) { String rowError 第 (context.readRowHolder().getRowIndex() 1) 行: violations.stream() .map(item - item.getMessage()) .collect(Collectors.joining(; )); errorMessages.add(rowError); } else { validDataList.add(data); } } Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { // 读取完成后如果有错误抛出异常 if (!CollUtil.isEmpty(errorMessages)) { throw MyException.myException(HttpStatus.HTTP_BAD_REQUEST, Excel数据校验失败: CollUtil.join(errorMessages, \n)); } } // 提供方法获取校验通过的数据 public ListT getValidDataList() { return validDataList; } }4、接口定义Autowired private Validator validator; PostMapping(/import) public void import(RequestParam(file) MultipartFile file) { try (InputStream inputStream file.getInputStream()) { //使用通用监听器读取并校验数据 CommonExcelListenerPerson listener new CommonExcelListener(validator); EasyExcel.read(inputStream, Person.class, listener) .sheet(0) .doRead(); //获取校验通过的有效数据 ListPerson validList listener.getValidDataList(); if (validList.isEmpty()) { throw MyException.myException(HttpStatus.HTTP_BAD_REQUEST, Excel文件中无有效数据); } personMapper.insert(validList); } catch (Exception e) { throw MyException.myException(HttpStatus.HTTP_BAD_REQUEST, e.getMessage()); } }

相关新闻

STM32--IIC

STM32--IIC

一、IIC简介左边位串口,右边位IICSDL数据传输主机可以向从机传送数据,从机也可以向主机传送,SCL作为时钟线,仅仅可以由主机发出,核心作用是 “同步通信节奏时钟信号(比如 I2C 的 SCL)和数据信号…

2026/7/4 16:57:55 阅读更多 →
StructBERT文本相似度模型快速上手:Gradio界面输入输出逻辑解析

StructBERT文本相似度模型快速上手:Gradio界面输入输出逻辑解析

StructBERT文本相似度模型快速上手:Gradio界面输入输出逻辑解析 1. 引言:从“像不像”到“有多像” 你有没有遇到过这样的场景?需要判断两段文字说的是不是一回事,或者想在海量文档里找到意思相近的内容?比如&#x…

2026/7/5 11:28:58 阅读更多 →
OFA-large模型GPU利用率实测:A10/A100显存占用与推理延迟优化分析

OFA-large模型GPU利用率实测:A10/A100显存占用与推理延迟优化分析

OFA-large模型GPU利用率实测:A10/A100显存占用与推理延迟优化分析 1. 引言:为什么需要关注GPU利用率? 如果你正在部署或使用OFA-large这类多模态大模型,可能会遇到一个常见问题:模型跑起来了,但GPU好像没…

2026/7/5 11:29:16 阅读更多 →

最新新闻

Docker run 命令 6 大核心参数实战:-v、-w、-e、-u、--rm、-it 组合解析

Docker run 命令 6 大核心参数实战:-v、-w、-e、-u、--rm、-it 组合解析

Docker Run 命令 6 大核心参数实战指南:-v、-w、-e、-u、--rm、-it 的组合艺术当你在终端输入docker run的那一刻,一个精密的容器化引擎便开始运作。但真正让这个简单的命令变得强大的,是那些看似不起眼的参数。本文将深入探讨六个最常用却常…

2026/7/6 2:05:46 阅读更多 →
3款轻量级骨架提取模型对比:MobilePose vs Lightweight OpenPose vs MoveNet,移动端实测 20+ FPS

3款轻量级骨架提取模型对比:MobilePose vs Lightweight OpenPose vs MoveNet,移动端实测 20+ FPS

3款轻量级骨架提取模型移动端实测:性能、精度与部署全解析在移动端和边缘计算设备上实现实时人体姿态估计一直是计算机视觉领域的难点。随着AI模型轻量化技术的进步,MobilePose、Lightweight OpenPose和MoveNet等模型让20FPS的实时骨架提取成为可能。本文…

2026/7/6 2:05:46 阅读更多 →
mRemoteNG免费远程连接管理器:3天从零到精通的完整教程

mRemoteNG免费远程连接管理器:3天从零到精通的完整教程

mRemoteNG免费远程连接管理器:3天从零到精通的完整教程 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_mirrors/mr/mRemoteNG …

2026/7/6 2:03:45 阅读更多 →
抖店体验分怎么提升-4点8分实操方法-抖音电商2026规则落地

抖店体验分怎么提升-4点8分实操方法-抖音电商2026规则落地

抖店体验分怎么提升?提升到4.8全套实操方法|抖音电商2026规则落地 前言 2026抖音电商体验分权重重新划定:商品体验50%、服务体验35%、物流体验15%,4.8分是店铺核心分水岭。低于4.8分,千川流量、商品卡自然流权重、平台…

2026/7/6 2:01:44 阅读更多 →
Haiwell Cloud SCADA 3 与主流 PLC 协议对比:支持 3 类设备驱动的连接实测

Haiwell Cloud SCADA 3 与主流 PLC 协议对比:支持 3 类设备驱动的连接实测

Haiwell Cloud SCADA 3 与主流 PLC 协议深度兼容性实测报告在工业自动化系统集成领域,多品牌PLC设备的互联互通一直是工程师面临的现实挑战。海为科技最新发布的Cloud SCADA 3版本以"内置多种工业设备驱动"为核心卖点,宣称能够无缝对接西门子、…

2026/7/6 1:59:44 阅读更多 →
数字通信同步技术:3种载波同步方法对比与低信噪比场景实战

数字通信同步技术:3种载波同步方法对比与低信噪比场景实战

数字通信同步技术:3种载波同步方法对比与低信噪比场景实战在数字通信系统中,载波同步是实现可靠数据传输的核心技术之一。当信号经过信道传输后,接收端需要精确恢复发送端的载波频率和相位,才能正确解调出原始信息。尤其在低信噪比…

2026/7/6 1:59:44 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻