EasyExcel表头校验,表内容校验
上传excel表格时候,要求要
姓名 | 身份证号 | 电话 | 地址 |
---|---|---|---|
可用户上传的是
身份证号 | 电话 | 姓名 | 地址 |
---|---|---|---|
出现这种用户上传表格和规定模板不同的时候,就需要加上表头校验
easyExcel里的
ExcelReaderBuilder read(InputStream inputStream, Class head, ReadListener readListener)方法
中的ReadListener 可以在listener里面做校验
具体代码如下
Controller
@PostMapping@ImportExcelpublic void add(@RequestPart("file") MultipartFile file, @Validated DemoVO demo) {demoService.saveDemo(file, demo);}
Service
public void saveDemo(MultipartFile file, DemoVO demo) {DemoListener listener = new DemoListener();try {// 这里read方法的第二个参数,是你想要入库的实体类,headRowNumber里面数字是几就是从excel表格的第几行开始读入库数据EasyExcel.read(file.getInputStream(), DemoVO.class, listener).sheet().headRowNumber(1).doRead();Map<String, String> map = listener.map;if (map.size() != 0){throw new ExcelException(map.get("msg"));}} catch (IOException e) {throw new ExcelException("您上传的文件格式与模板格式不一致,请检查后重新上传");}// 此时拿到的data已经是校验通过后的集合,可对该集合进行业务需要的操作List<DemoVO> demoList = listener.getData();
}
read方法的listener
// 继承AnalysisEventListener,括号里放表格对应实体类
@Component
public class DemoListener extends AnalysisEventListener<DemoVO> {public List<DemoVO> data = new ArrayList<DemoVO>();// 此map用来存储错误提示public Map<String, String> map = new HashMap<>();public DemoListener() {}/*** 重写invokeHeadMap方法,校验表头*headMap的key是表头下标,value是内容*/@Overridepublic void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {// headMap.containsKey(下标),先判空// headMap.get(0).equals() 判内容是否相符if (!headMap.containsKey(0) || !headMap.containsKey(1) || !headMap.containsKey(2) || !headMap.containsKey(3) || !headMap.get(0).equals("姓名") || !headMap.get(1).equals("身份证号") || !headMap.get(2).equals("电话") || !headMap.get(3).equals("地址") ) {// 这里给data加1条空数据,是因为doAfterAllAnalysed方法最后有判是否是空列表data.add(new DemoVO());map.put("msg", "您上传的文件格式与模板格式不一致,请检查后重新上传");// 这里业务中可改为直接抛出异常,外层去捕获return;}}@Overridepublic void invoke(DemoVO demo, AnalysisContext analysisContext) {// 这里放具体数据校验方法,校验通过往data里面放数据,否则直接returnif (checkValidateBlank(demo) && checkValidateLength(demo)) {data.add(demo);} else {return;}}/*** 字段为空校验** @param demo* @return*/protected boolean checkValidateBlank(DemoVO demo) {if (StringUtils.isEmpty(demo.getName()) || StringUtils.isEmpty(demo.getMobile())|| StringUtils.isEmpty(demo.getIdCardNo()) || StringUtils.isEmpty(demo.getAdress())) {map.put("msg", "您上传的文件内容含有空白数据,请检查后重新上传");return false;}return true;}/*** 校验长度** @param demo* @return*/protected boolean checkValidateLength(DemoVO demo) {if (demo!= null) {if (demo.getName().length() > 30 || demo.getMobile().length() > 30 || demo.getIdCardNo().length() > 30 || demo.getAdress().length() > 30) {map.put("msg", "您上传的文件内容文字长度超出常规,请检查后重新上传");return false;}}return true;}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {if (!CollectionUtils.isNotEmpty(data)) {throw new ExcelException("excel无有效数据");}}public List<DemoVO> getData() {return data;}
}
EasyExcel表头校验,表内容校验相关推荐
- 【css】纯css实现table表格固定表头,表内容滚动
今天在写公司项目的时候,遇到了一个比较xx的问题,现公司的项目使用的是 vue2.0 和 element-ui 搭建的. 那么提到 element-ui 大家都知道,他最实用的一个组件就是表格了,简直 ...
- antd 表单提交,文件和表单内容一起提交,表单校验
用很简单的源码实现包含下列 antd 表单相关知识: 1.表单必填校验,规则校验 2.Upload 上传图片,获取上传图片的状态,如上传成功,上传失败,上传进度条,删除上传的文件 3.获取 Input ...
- php表单验证内容不能为空,php校验表单检测字段是否为空的方法_PHP教程
php校验表单检测字段是否为空的方法 这篇文章主要介绍了php校验表单检测字段是否为空的方法,涉及php验证表单的技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了php校验表单检测字段是否 ...
- EasyExcel读excel文件模板校验暨时间格式正则表达式
EasyExcel 读取文件模板校验(限于单无单元格合并类型) 阐述: 首先定义EasyExcel 导入文件时所要转的文件实体类,主要该文件实体类要加上**@ExcelProperty**注解,目的相 ...
- easyui收派标准客户端表单校验
easyui收派标准客户端表单校验 js代码: //对收派标准的save按钮,添加点击事件 $("#save").click(function(){//判断form数据是否都通过校 ...
- jQuery表单校验jquery.validate.js的使用
jQuery是一个快速.简洁的js库,为网站的快速开发简化了HTML文档遍历,事件处理,动画,以及Ajax交互.使用jQuery将极大的提高编写javascript代码的效率, 让写出来的代码更加优雅 ...
- 【前端3】jquary:页面加载,选择器,隔行换色,Dom,全选,动画,遍历,广告/抽奖,表单校验插件
文章目录 1.jquery框架引入:$("mydiv") 当成id选择器 2.jquery版本/对象:$(js对象) -> jquery对象 3.jquery的页面加载事件: ...
- 【前端2】js:原始类型,运算符,调试,页面加载,轮播图,Bom(对象,时钟),Dom(全选全不选,省市级联,隔行/触摸换色,表单校验)
文章目录 1.js两种引入:js最终要引入到html在浏览器中运行 2.js五大原始类型:undefined 3.js的运算符和流程控制:js不支持单&和单|性能低 4.案例_99乘法表:So ...
- Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
vee-validate 是为 Vue.js 量身打造的表单校验框架,允许您校验输入的内容并显示对应的错误提示信息.它内置了很多常见的校验规则,可以组合使用多种校验规则,大部分场景只需要配置就能实现开 ...
最新文章
- 如何修改Admin用户名
- 二维空间有没有厚度_平面设计并不平!空间构成了解一下
- 完美世界2020编程题-救雅典娜 英雄AB PK
- 无论如何都是为了测试傻瓜搜索引擎
- no response after clicking clone in github desktop
- Python基础笔记(二) List、tuple、循环语句
- python MySQLdb安装和使用
- channelread0会被调用两次_[菜鸟SpringCloud入门]第四章:远程调用服务实战
- html 显示unicode字符,网页中使用Unicode字符
- 中国居民人均财富36.6万元,你达标了吗?
- python使用cookie登陆新浪微博用户信息
- RocketMQ创建topic流程解析
- 2018上海科技大学991数据结构与算法
- 八字易经算法之用JAVA实现日子吉凶星
- 西蒙斯告诉你何为传奇人生 James Simons
- Win10更新、重装后 触摸板无法关闭
- SqlHelper的使用
- 51单片机c语言编程的头文件,51单片机编程的头文件reg51.h详解
- 广告业务系统 之 核心通道 —— “日志中心-s2s监测上报”
- 结合近半年的谷歌算法更新,总结电子商务网站的推广