EasyPoi表格导入添加校验

EasyPoi表格导入添加校验

  • 项目添加maven依赖
    • 实体类
    • 自定义校验
    • controller
    • 测试结果

项目添加maven依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.4</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>org.example</groupId><artifactId>easypoi-demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--easy poi 依赖--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.5.0</version></dependency><!--hibernate校验--><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.4.1.Final</version></dependency><dependency><groupId>javax.el</groupId><artifactId>javax.el-api</artifactId><version>3.0.0</version></dependency><dependency><groupId>org.glassfish.web</groupId><artifactId>javax.el</artifactId><version>2.2.6</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.20</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.48</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>3.1.2</version><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

实体类

package com.demo.entity;import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelIgnore;
import cn.afterturn.easypoi.handler.inter.IExcelDataModel;
import cn.afterturn.easypoi.handler.inter.IExcelModel;
import lombok.Data;@Data
public class User implements IExcelDataModel, IExcelModel {@Excel(name = "序号", width = 20)private String serialNum;@Excel(name = "姓名", width = 20)private String name;@Excel(name = "性别", width = 20)private String gender;/*** 行号*/@ExcelIgnoreprivate Integer rowNum;/*** 错误信息*/@ExcelIgnoreprivate String errorMsg;
}

自定义校验

package com.demo.util;import cn.afterturn.easypoi.excel.entity.result.ExcelVerifyHandlerResult;
import cn.afterturn.easypoi.handler.inter.IExcelVerifyHandler;
import cn.hutool.core.util.ObjectUtil;
import com.demo.entity.User;
import org.springframework.stereotype.Component;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;/*** 自定义校验*/
@Component
public class UserVerifyHandler implements IExcelVerifyHandler<User> {@Overridepublic ExcelVerifyHandlerResult verifyHandler(User user) {String[] genders = {"男", "女"};if (ObjectUtil.isEmpty(user.getName()) && ObjectUtil.isEmpty(user.getGender())) {// 姓名和性别都为空,就不处理,算校验通过return new ExcelVerifyHandlerResult(true);}List<String> genderList = new ArrayList<>(Arrays.asList(genders));if (!genderList.contains(user.getGender())) {return new ExcelVerifyHandlerResult(false, "性别不合法");}return new ExcelVerifyHandlerResult(true);}
}

controller

package com.demo.controller;import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
import com.demo.entity.User;
import com.demo.util.UserVerifyHandler;
import jakarta.annotation.Resource;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List;@RestController
public class UserController {/*** 注入自定义处理器*/@Resourceprivate UserVerifyHandler userVerifyHandler;@PostMapping(value = "/excel/importTest")public List<User> excelImportTest(@RequestParam("file") MultipartFile file) throws Exception {ImportParams params = new ImportParams();params.setHeadRows(1);// 代表导入这里是需要验证的params.setNeedVerify(true);// 校验处理接口params.setVerifyHandler(userVerifyHandler);ExcelImportResult<User> importResult = ExcelImportUtil.importExcelMore(file.getInputStream(), User.class, params);List<User> userList = importResult.getList();// isVerifyFail:是否存在校验失败,true为校验失败,false为校验成功if (importResult.isVerifyFail() || userList.isEmpty()) {// 校验失败或者导入的数据为空,输出错误记录的表格Workbook workbook = importResult.getFailWorkbook();String path = "C:\\Users\\16837\\Desktop\\error.xls";OutputStream outputStream = new FileOutputStream(path, true);workbook.write(outputStream);// 关闭输出流workbook.close();outputStream.close();}return userList;}
}

测试结果

在这里插入图片描述
页面生成到处错误文件的excel
在这里插入图片描述
表格内容如下
在这里插入图片描述

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

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

相关文章

欧美地区媒体发稿:8个高效率方式分析提高知名度

1.媒体发稿推广的意义媒体发稿营销推广是指由企业和产品的信息传递给目标群体的一个过程。在欧美地区&#xff0c;媒体发稿营销推广针对企业品牌建设与市场开拓尤为重要。根据媒体发稿营销推广&#xff0c;企业能够提高知名度&#xff0c;提升曝光度&#xff0c;提升销售。 2.寻…

CentOS7安装node-v20.12.2

个人记录 官网查看最新版本 NodeJs下载地址 进入指定目录 cd /usr/local/下载 wget https://nodejs.org/dist/v20.12.2/node-v20.12.2-linux-x64.tar.xz --no-check-certificate解压 tar -xvf node-v20.12.2-linux-x64.tar.xz查看 ls ls node-v20.12.2-linux-x64编辑配…

如何发现高危的PoC和EXP?漏洞检测方法 示例,实战应急实战举例,包括:SQLi、XSS、SSTI/ELI、文件哈希、SSRF、命令执行/命令注入等等

如何发现高危的PoC和EXP?漏洞检测方法 & 示例,实战应急实战举例,包括:SQLi、XSS、SSTI/ELI、文件哈希、SSRF、命令执行/命令注入等等。 在网络安全领域,发现高危的PoC(Proof of Concept)和EXP(Exploit)对于防范和应对潜在的安全威胁至关重要。以下是关于如何发现高…

苍穹外卖学习记录(一)

1.JWT令牌认证 JSON Web Token (JWT)是一个开放标准(RFC 7519)&#xff0c;它定义了一种紧凑的、自包含的方式&#xff0c;用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任&#xff0c;因为它是数字签名的。 JWT是目前最常用的一种令牌规范&#xff0c;它最…

支持向量机模型pytorch

通过5个条件判定一件事情是否会发生&#xff0c;5个条件对这件事情是否发生的影响力不同&#xff0c;计算每个条件对这件事情发生的影响力多大&#xff0c;写一个支持向量机模型pytorch程序,最后打印5个条件分别的影响力。 示例一 支持向量机&#xff08;SVM&#xff09;是一种…

postgis导入shp数据时“dbf file (.dbf) can not be opened.“

作者进行矢量数据导入数据库中出现上述报错 导致报错原因 导入的shp文件路径太深导入的shp文件名称或路径中有中文将需要导入数据的shp 文件、dbf 文件、prj 等文件放在到同一个文件夹内&#xff0c;且名字要一致&#xff1b;导入失败&#xff1a; 导入成功&#xff1a;

近屿智能独家研发出专用于AIGC工程师的学习路径图

近期&#xff0c;关于“人工智能将取代大量人类工作”的讨论愈发热烈。在CCTV-13的《两会你我他》访谈节目中&#xff0c;专家们深入探讨了这一议题。他们普遍认为&#xff0c;AI技术本身不会直接取代人类的工作&#xff0c;而是那些掌握了AI技术的人可能会在职场上占据优势。这…

算法题解记录11+++从前序与中序遍历序列构造二叉树(百日筑基)

题目描述&#xff1a; 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,…

SpringBoot集成Skywalking日志收集

在实际项目中&#xff0c;为了方便线上排查问题&#xff0c;尤其是微服务之间调用链路比较复杂的系统中&#xff0c;通过可视化日志的手段仍然是最直接也很方便的排查定位问题的手段&#xff0c;比如大家熟悉的ELK就是一种比较成熟的可视化日志展现方式&#xff0c;在skywalkin…

mysql performance schema 实践

参考MySQL调优性能监控之performance schema,做了一些扩展 1 2、哪类SQL的平均响应时间最多 SUM_NO_INDEX_USED>0用来过滤那些没有使用的查询。 SELECT SCHEMA_NAME,DIGEST_TEXT,AVG_TIMER_WAIT,MAX_TIMER_WAIT,SUM_LOCK_TIME,SUM_ERRORS ,SUM_SELECT_FULL_JOIN,SUM_NO_IND…

基于SSM强国有我党建网站

摘要 国家的繁荣富强与每一个人都息息相关密不可分并且关系密切&#xff0c;无论是从事最底层的工作的城市清洁工、工地上的民工、街边自己售卖自制商品进行生活的小商小贩&#xff1b;还是有一定的经济地位可以在电视中&#xff0c;采访中&#xff0c;各类访谈节目以及广大影…

【ARM 裸机】汇编 led 驱动之编译程序

编译程序这一节分为四个步骤&#xff1a; 1、将 .s .c 文件变成 .o 文件&#xff0c;使用 arm-linux-gnueabihf-gcc&#xff1b; arm-linux-gnueabihf-gcc -g -c leds.s -o led.o上述命令就是将 leds.s 编译为 led.o&#xff0c;其中“ -g ”选项是产生调试信息&#xff0c;G…