上传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表头校验,表内容校验相关推荐

  1. 【css】纯css实现table表格固定表头,表内容滚动

    今天在写公司项目的时候,遇到了一个比较xx的问题,现公司的项目使用的是 vue2.0 和 element-ui 搭建的. 那么提到 element-ui 大家都知道,他最实用的一个组件就是表格了,简直 ...

  2. antd 表单提交,文件和表单内容一起提交,表单校验

    用很简单的源码实现包含下列 antd 表单相关知识: 1.表单必填校验,规则校验 2.Upload 上传图片,获取上传图片的状态,如上传成功,上传失败,上传进度条,删除上传的文件 3.获取 Input ...

  3. php表单验证内容不能为空,php校验表单检测字段是否为空的方法_PHP教程

    php校验表单检测字段是否为空的方法 这篇文章主要介绍了php校验表单检测字段是否为空的方法,涉及php验证表单的技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了php校验表单检测字段是否 ...

  4. EasyExcel读excel文件模板校验暨时间格式正则表达式

    EasyExcel 读取文件模板校验(限于单无单元格合并类型) 阐述: 首先定义EasyExcel 导入文件时所要转的文件实体类,主要该文件实体类要加上**@ExcelProperty**注解,目的相 ...

  5. easyui收派标准客户端表单校验

    easyui收派标准客户端表单校验 js代码: //对收派标准的save按钮,添加点击事件 $("#save").click(function(){//判断form数据是否都通过校 ...

  6. jQuery表单校验jquery.validate.js的使用

    jQuery是一个快速.简洁的js库,为网站的快速开发简化了HTML文档遍历,事件处理,动画,以及Ajax交互.使用jQuery将极大的提高编写javascript代码的效率, 让写出来的代码更加优雅 ...

  7. 【前端3】jquary:页面加载,选择器,隔行换色,Dom,全选,动画,遍历,广告/抽奖,表单校验插件

    文章目录 1.jquery框架引入:$("mydiv") 当成id选择器 2.jquery版本/对象:$(js对象) -> jquery对象 3.jquery的页面加载事件: ...

  8. 【前端2】js:原始类型,运算符,调试,页面加载,轮播图,Bom(对象,时钟),Dom(全选全不选,省市级联,隔行/触摸换色,表单校验)

    文章目录 1.js两种引入:js最终要引入到html在浏览器中运行 2.js五大原始类型:undefined 3.js的运算符和流程控制:js不支持单&和单|性能低 4.案例_99乘法表:So ...

  9. Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验

    vee-validate 是为 Vue.js 量身打造的表单校验框架,允许您校验输入的内容并显示对应的错误提示信息.它内置了很多常见的校验规则,可以组合使用多种校验规则,大部分场景只需要配置就能实现开 ...

最新文章

  1. 如何修改Admin用户名
  2. 二维空间有没有厚度_平面设计并不平!空间构成了解一下
  3. 完美世界2020编程题-救雅典娜 英雄AB PK
  4. 无论如何都是为了测试傻瓜搜索引擎
  5. no response after clicking clone in github desktop
  6. Python基础笔记(二) List、tuple、循环语句
  7. python MySQLdb安装和使用
  8. channelread0会被调用两次_[菜鸟SpringCloud入门]第四章:远程调用服务实战
  9. html 显示unicode字符,网页中使用Unicode字符
  10. 中国居民人均财富36.6万元,你达标了吗?
  11. python使用cookie登陆新浪微博用户信息
  12. RocketMQ创建topic流程解析
  13. 2018上海科技大学991数据结构与算法
  14. 八字易经算法之用JAVA实现日子吉凶星
  15. 西蒙斯告诉你何为传奇人生 James Simons
  16. Win10更新、重装后 触摸板无法关闭
  17. SqlHelper的使用
  18. 51单片机c语言编程的头文件,51单片机编程的头文件reg51.h详解
  19. 广告业务系统 之 核心通道 —— “日志中心-s2s监测上报”
  20. 结合近半年的谷歌算法更新,总结电子商务网站的推广

热门文章

  1. java转码及页面乱码原因分析
  2. JavaScript实现猜数字游戏(猜一位和四位数字)
  3. 【身份鉴别-身份标识】Linux系统用户及用户组管理
  4. 计算机网络基础(理论知识全)
  5. 双足机器人课设报告_双足竞步机器人-智能步行者设计-技术报告
  6. 仿淘宝购物车demo---增加和减少商品数量
  7. win7连接网络打印机需要输入网络密码,怎么办
  8. ChaosBlade:混沌工程简介(一)
  9. linux ipv6添加路由器,使用Linux搭建IPV6路由器(CentOS版)
  10. 移动页面HTML5自适应手机屏幕宽度