前言

又又又接手老项目 进行改造… 之前poi写的excel导入会导致oom内存溢出,调了内存也没用 就用EasyExcel重写了下 基于原项目结构的写 确实好难受

一句话概括本文:

引用传递

开始

由于我需要基于原项目逻辑走 导入之后的各种校验需要根据service层的逻辑进行数据校验(这里我要基于原项目结构的写,easyexcel有数据校验注解具体看官方文档),

校验失败然后service层会抛出个异常,正常应该在controller层捕捉异常然后返回给页面的,但是在使用easyexcel 时候被重写方法是没有异常抛出的 根据java重写规则重写的方法只能比原方法抛出更小的异常,也就是说我在service层抛出异常 路过监听器的时候就已经没了

这时候想返回前台某一列数据校验失败就要用到值传递,

步骤:

在controller层初始化一个ajax返回对象 然后通过监听器的构造方法将返回对象传入 捕捉service的异常(或者你将错误信息返回出来也行,这个老项目写的是用异常将错误信息带出来) 将错误信息存到ajax返回对象就行,然后controller直接返回这个ajax对象

上代码:

controller

 @ResponseBody@RequestMapping(value = "orderImport", method = RequestMethod.POST, produces = Constant.CONTENT_TYPE_UTF8)public RestResponse orderImport(HttpServletRequest request,  @RequestParam(value = "file") MultipartFile file) throws Exception {UserVO userVo = this.getCurrentUser(request);// 初始化ajax返回对象 默认是操作成功RestResponse build = RestResponse.build();EasyExcel.read(file.getInputStream(), new NoModleDataListener(orderService, userVo, build)).sheet().doRead();// 直接返回  如果错误这个对象的值已被改变 如果没有错误值没有被改变 返回的是默认成功的对象return build;// return orderService.importOrder(userVo, file);}

监听器:


/*** @author: [青衫] 'QSSSYH@QQ.com'* @Date: 2020-01-07 11:09* @Description: < map接收解析数据-监听器 >*/
public class NoModleDataListener extends AnalysisEventListener<Map<Integer, String>> {private static final Logger LOGGER = LoggerFactory.getLogger(NoModleDataListener.class);/**业务逻辑层*/private OrderService orderService;/**用户Vo*/private UserVO userVO;/**ajax返回对象*/private RestResponse build;/**excel头*/private Map<Integer, String> headMaps;/*** 监听器构造方法** @param orderService 业务逻辑层* @param userVO       用户vo (Service业务使用)* @param build        ajax返回对象*/public NoModleDataListener(OrderService orderService, UserVO userVO, RestResponse build) {this.orderService = orderService;this.userVO = userVO;this.build = build;}/*** 每隔3000条存储数据库*/private static final int BATCH_COUNT = 3000;List<Map<Integer, String>> list = new ArrayList<Map<Integer, String>>();@Overridepublic void invoke(Map<Integer, String> data, AnalysisContext context) {list.add(data);if (list.size() >= BATCH_COUNT) {try {saveData();} catch (Exception e) {build.setCode(1);build.setMsg(e.getMessage());}list.clear();}}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {try {saveData();} catch (Exception e) {// 将返回对象code改为错误状态码build.setCode(1);// 存入错误信息build.setMsg(e.getMessage());}}@Overridepublic void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {headMaps = headMap;}/*** 存储数据库*/private void saveData() throws Exception {orderService.importOrders(userVO, list, headMaps);LOGGER.info("存储数据库成功!");}/***解析出现错误会进入该方法 具体看源代码或文档*/@Overridepublic void onException(Exception exception, AnalysisContext context) throws Exception {System.out.println("hello");throw exception;}
}

EasyExcel如何返回业务处理中的错误信息相关推荐

  1. VS2017 无法启动 IIS EXPRESS Web 服务器。 工作进程未能正确初始化,因而无法启动。返回的数据为错误信息。已解决!!!

    在应用程序中看到两个报错 1.在要求开始处理 http 请求时,应用程序池"Clr4IntegratedAppPool"的工作进程(PID="488")未能初始 ...

  2. f12控制台如何查看consul_如何打印consul的错误信息

    在配置文件中添加 management: endpoints: web: exposure: include: "*" endpoint: shutdown: enabled: t ...

  3. easy-excel 导入数据校验 不正确则导出excel并提示错误信息

    需求 : 导入excel 校验第二列 数据格式 不正确则导出excel并提示错误信息 导入图: 预期效果: 引入依赖 <dependency><groupId>com.alib ...

  4. null?对象?异常?到底应该如何返回错误信息

    null?对象?异常?到底应该如何返回错误信息 参考文章: (1)null?对象?异常?到底应该如何返回错误信息 (2)https://www.cnblogs.com/dsj2016/p/748208 ...

  5. ios请求php接口失败,laravel,php_iOS调用Laravel接口返回错误信息,laravel,php,ios - phpStudy...

    iOS调用Laravel接口返回错误信息 iOS端代码如下: AFHTTPRequestOperationManager *manage = [[AFHTTPRequestOperationManag ...

  6. C语言中返回错误信息的函数总结

    C语言strerror()函数:返回错误原因的描述字符串 头文件: #include <string.h> 定义函数: char * strerror(int errnum); 函数说明: ...

  7. 配置错误:未能使用提供程序“RsaProtectedConfigurationProvider”进行解密。提供程序返回错误信息为: 打不开 RSA 密钥容器。...

    http://www.cnblogs.com/jiaruistone/articles/1441634.html 在asp.net2.0中新增了对web.config中的部分数据进行加密的功能,可以使 ...

  8. Spring中抛出异常时,既要要返回错误信息,还要做事务回滚

    情况一:如果没有在程序中手动捕获异常,如下代码事务会回滚 @Transactional(rollbackFor = { Exception.class }) public void test() th ...

  9. java异常自定义返回信息,Spring Boot 如何自定义返回错误码错误信息

    说明 在实际的开发过程中,很多时候要定义符合自己业务的错误码和错误信息,而不是统一的而不是统一的下面这种格式返回到调用端 INTERNAL_SERVER_ERROR(500, "Intern ...

最新文章

  1. Spark PruneDependency 依赖关系 RangePartitioner
  2. Java 原子变量类
  3. [基础]Linux文件说明
  4. windows下进程间通信的(13种方法)
  5. matlab gui打开fig文件,求助gui打开word文件及打开fig格式图片
  6. 一场性能当道 优化为王的沙龙盛宴
  7. 51单片机(STC89C52RC) lcd1602实验小结
  8. (六)为时装设计生成训练和运行GAN
  9. [国嵌攻略][038][时钟初始化]
  10. 前端传递给后端且通过cookie方式,尽量传递id
  11. Cisco交换机下载IOS
  12. typedef用法总结
  13. java简历校园经历_简历中的校园经历怎么写
  14. 实例分割新作——Instances as Queries
  15. [Vuetify] Multiple instances of Vue detected
  16. ESP8266——入门:点亮TFT液晶屏(五)
  17. CodinGame - Chuck Norris 思路
  18. python 判断回文数
  19. MacBook无故黑屏,按键没反应解决办法
  20. AGV三种导航方式,苏州凌鸟带你走进AGV世界

热门文章

  1. [windows优化]win10折腾过程
  2. 支持移动触摸设备的简洁js幻灯片插件
  3. 1930年代后期发明的断层合成技术:概念:移动-叠加
  4. 花火之声不闻于耳 [线段树]
  5. Netty-入门篇(核心组件介绍实战)
  6. Zmeet云雾架构-融合AI能力的通讯层的变革,性能远超传统通讯技术
  7. Vue | 指令实现自动填充英文名功能
  8. 20210212【学习笔记】Python初步
  9. 电脑快捷键全都在这了!电脑技巧收藏!
  10. SpringBoot系列:Spring Boot集成定时任务Quartz,java百度云短信发送