网站首页 java综合 正文
使用EasyExcel 导入表格数据是出现 空指针 java.lang.NullPointerException: null
作者:weixin_47056195 更新时间: 2022-01-24 java综合原代码如下
控制器中
/**
* easyExcel导入方式
* @return
*/
@PostMapping("/importExcel")
public R<?> importExcel(){
//导入需要添加一个监听
//1. 获取导入文件的路径
String path = "C:\\Users\\YKT\\Desktop\\临时\\car.xls";
//创建读入的excel的构造器 告诉其文件位置,要读那个java对象 以及读取监听器
//读取之后 在监听器中插入数据库
ExcelReader build = EasyExcel.read(path,Excel.class,new ExcelListener()).build();
// 0 表示只导入第一个sheet表中的数据
ReadSheet readSheet = EasyExcel.readSheet(0).build();
build.read(readSheet);
build.finish();
return R.ok("导入成功!");
}
监听器
package com.example.car.carmall.Listenner;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.example.car.carmall.domain.Excel;
import com.example.car.carmall.mapper.ExcelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author wcb 导入excel 监听器
* 创建读取监听器类 继承 AnalysisEventListener类 并将其要读取成的java对象传入泛型
* @date 2022 年 01月 13 日 11:42
*/
public class ExcelListener extends AnalysisEventListener<Excel> {
@Autowired
private ExcelMapper mapper;
/**
* 逐行读取 读取之后 在监听器中插入数据库
* @param excel
* @param analysisContext
*/
@Override
public void invoke(Excel excel, AnalysisContext analysisContext) {
SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
System.out.println(dfs.format(new Date()) +" ====== "+excel);
//加入数据库
mapper.insertIntoExcel(excel);
}
/**
* 读取完毕触发执行
* @param analysisContext
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
System.out.println("finish");
}
}
执行之后报错,如下:
2022-01-13 16:29:35.579 ====== Excel(id=1, carNo=云A9874, carType=宝马, carResources=null, carPhone=17787144154, day=10, price=300, useTime=20, outPrice=200, totalPrice=4000, custName=大兵, custPhone=17787144154, orderResource=百度, address=昆明, startTime=2021-10-05 13:33:29, createTime=null, endTime=2021-10-31 13:33:35, deposit=10000, backTime=2021-10-31 13:34:16, remark=记住, status=null)
2022-01-13 16:29:35.580 ERROR 9000 --- [nio-9090-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.alibaba.excel.exception.ExcelAnalysisException] with root cause
java.lang.NullPointerException: null
at com.example.car.carmall.Listenner.ExcelListener.invoke(ExcelListener.java:33) ~[classes/:na]
at com.example.car.carmall.Listenner.ExcelListener.invoke(ExcelListener.java:17) ~[classes/:na]
at com.alibaba.excel.read.metadata.holder.AbstractReadHolder.notifyEndOneRow(AbstractReadHolder.java:145) ~[easyexcel-2.1.6.jar:na]
at com.alibaba.excel.analysis.v03.XlsSaxAnalyser.endRow(XlsSaxAnalyser.java:193) ~[easyexcel-2.1.6.jar:na]
at com.alibaba.excel.analysis.v03.XlsSaxAnalyser.processLastCellOfRow(XlsSaxAnalyser.java:183) ~[easyexcel-2.1.6.jar:na]
at com.alibaba.excel.analysis.v03.XlsSaxAnalyser.processRecord(XlsSaxAnalyser.java:172) ~[easyexcel-2.1.6.jar:na]
at org.apache.poi.hssf.eventusermodel.MissingRecordAwareHSSFListener.processRecord(MissingRecordAwareHSSFListener.java:158) ~[poi-3.17.jar:3.17]
at org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener.processRecord(FormatTrackingHSSFListener.java:92) ~[poi-3.17.jar:3.17]
at org.apache.poi.hssf.eventusermodel.HSSFRequest.processRecord(HSSFRequest.java:109) ~[poi-3.17.jar:3.17]
at org.apache.poi.hssf.eventusermodel.HSSFEventFactory.genericProcessEvents(HSSFEventFactory.java:179) ~[poi-3.17.jar:3.17]
at org.apache.poi.hssf.eventusermodel.HSSFEventFactory.processEvents(HSSFEventFactory.java:136) ~[poi-3.17.jar:3.17]
at org.apache.poi.hssf.eventusermodel.HSSFEventFactory.processWorkbookEvents(HSSFEventFactory.java:82) ~[poi-3.17.jar:3.17]
at org.apache.poi.hssf.eventusermodel.HSSFEventFactory.processWorkbookEvents(HSSFEventFactory.java:54) ~[poi-3.17.jar:3.17]
at com.alibaba.excel.analysis.v03.XlsSaxAnalyser.execute(XlsSaxAnalyser.java:112) ~[easyexcel-2.1.6.jar:na]
at com.alibaba.excel.analysis.ExcelAnalyserImpl.analysis(ExcelAnalyserImpl.java:105) ~[easyexcel-2.1.6.jar:na]
at com.alibaba.excel.ExcelReader.read(ExcelReader.java:180) ~[easyexcel-2.1.6.jar:na]
at com.alibaba.excel.ExcelReader.read(ExcelReader.java:170) ~[easyexcel-2.1.6.jar:na]
at com.example.car.carmall.controller.ExcelController.importExcel(ExcelController.java:159) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_91]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_91]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_91]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) ~[spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892) ~[spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) ~[spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039) ~[spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) ~[spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) ~[spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908) ~[spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) ~[tomcat-embed-core-9.0.22.jar:9.0.22]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) ~[spring-webmvc-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.22.jar:9.0.22]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.22.jar:9.0.22]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.22.jar:9.0.22]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.22.jar:9.0.22]
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.22.jar:9.0.22]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118) ~[spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:853) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.22.jar:9.0.22]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_91]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_91]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.22.jar:9.0.22]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_91]
打断点发现 注入的mapper 为空,所以报错

经过分析得:监听器中不能使用spring注入,所以报错,在网上找到其中一种解决办法使用set 形式 注入mapper,如下:
在控制器中使用监听的地方将mapper代入,如下:
/**
* easyExcel导入方式
* @return
*/
@PostMapping("/importExcel")
public R<?> importExcel(){
//导入需要添加一个监听
//1. 获取导入文件的路径
String path = "C:\\Users\\YKT\\Desktop\\临时\\car.xls";
//创建读入的excel的构造器 告诉其文件位置,要读那个java对象 以及读取监听器
//读取之后 在监听器中插入数据库
// new ExcelListener(excelMapper) ***将 mapper 带入 ***
ExcelReader build = EasyExcel.read(path,Excel.class,new ExcelListener(excelMapper)).build();
// 0 表示只导入第一个sheet表中的数据
ReadSheet readSheet = EasyExcel.readSheet(0).build();
build.read(readSheet);
build.finish();
return R.ok("导入成功!");
}
监听器
在监听器中引入 接口
/**
* 引入接口
*/
ExcelMapper mapper;
通过构造函数从外部传入接口
/**
* 我们通过构造函数从外部传入接口
* @param mapper
*/
public ExcelListener(ExcelMapper mapper){
this.mapper = mapper;
}
完整代码 如下:
package com.example.car.carmall.Listenner;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.example.car.carmall.domain.Excel;
import com.example.car.carmall.mapper.ExcelMapper;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author wcb 导入excel 监听器
* 创建读取监听器类 继承 AnalysisEventListener类 并将其要读取成的java对象传入泛型
* @date 2022 年 01月 13 日 11:42
*/
public class ExcelListener extends AnalysisEventListener<Excel> {
/**
* 引入接口
*/
ExcelMapper mapper;
/**
* 我们通过构造函数从外部传入接口
* @param mapper
*/
public ExcelListener(ExcelMapper mapper){
this.mapper = mapper;
}
/**
* 逐行读取 读取之后 在监听器中插入数据库
* @param excel
* @param analysisContext
*/
@Override
public void invoke(Excel excel, AnalysisContext analysisContext) {
SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
System.out.println(dfs.format(new Date()) +" ====== "+excel);
//加入数据库
mapper.insertIntoExcel(excel);
}
/**
* 读取完毕触发执行
* @param analysisContext
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
System.out.println("finish");
}
}
以上方法可以解决报错,这是多种方式中的一种,其他的解决方式正在研究,如果各位有其他方法也请指教
原文链接:https://blog.csdn.net/weixin_47056195/article/details/122477071
- 上一篇:开发第一个Java程序:HelloWorld
- 下一篇:【Java】数据结构与运算符
相关推荐
- 2022-04-11 C#实现简易计算器功能(1)(窗体应用)_C#教程
- 2022-06-08 Spring Boot Start之mqtt框架封装
- 2022-09-08 python如何获取tensor()数据类型中的值_python
- 2022-12-09 C#调用Windows的API实现窗体动画_C#教程
- 2022-07-23 C#中的随机数函数Random()_C#教程
- 2022-09-24 React报错之Object is possibly null的问题及解决方法_React
- 2022-07-17 使用SQL语句实现查询排序,顺序和倒序_MsSql
- 2023-07-30 el-table自定义合并行或列
- 栏目分类
- 最近更新
-
- window11 系统安装 yarn
- 超详细win安装深度学习环境2025年最新版(
- Linux 中运行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存储小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基础操作-- 运算符,流程控制 Flo
- 1. Int 和Integer 的区别,Jav
- spring @retryable不生效的一种
- Spring Security之认证信息的处理
- Spring Security之认证过滤器
- Spring Security概述快速入门
- Spring Security之配置体系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置权
- redisson分布式锁中waittime的设
- maven:解决release错误:Artif
- restTemplate使用总结
- Spring Security之安全异常处理
- MybatisPlus优雅实现加密?
- Spring ioc容器与Bean的生命周期。
- 【探索SpringCloud】服务发现-Nac
- Spring Security之基于HttpR
- Redis 底层数据结构-简单动态字符串(SD
- arthas操作spring被代理目标对象命令
- Spring中的单例模式应用详解
- 聊聊消息队列,发送消息的4种方式
- bootspring第三方资源配置管理
- GIT同步修改后的远程分支
