【发布时间】:2026-02-16 21:55:02
【问题描述】:
在使用 Web 应用程序时,我在根据结果生成 Excel 工作表时遇到了一些问题。对于每个请求,此 Excel 工作表数据应该是独立的。截至目前,我已通过以下方式实现:
为excel配置创建了一个xml文件
spring-excel-views.xml
<bean id="excelView" class="com.test.service.excelService"
I have configure this xml in the servlet configuration file
<bean class="xmlReolver> //Mentioned clearly in the code but not here
<property name="location>
<value>bin/spring-excel-views.xml</value>
</property>
</bean>
现在我有控制器类和实用程序类 UtiilityClass:计算结果并发回Controller
Controller: model.addAttribute("result", result); //Assuming result is coming for Utility class
现在在excelService.java中编码如下:
class ExcelService implements AbstractExcelView{
@overridden
protected void buildExcelDocument(Map model,HttpServletRequest req, HTTPServletResponse res){
Map m = model.getResults("results"); // Picking this from Controller
for(Map.Entry<Integer,String> entry: m.entrySet()){ -->Exception is throwing
//excel sheet logiic
}
//iteration logic ----> Exception thrown here
}
}
这里有时excel表生成成功,有时在开始迭代之前抛出Nullpointerexception。此 excel 数据也被其他一些请求数据覆盖。显示的结果很好,但我遇到了 Excel 工作表数据的问题。
帮我解决这个问题。
异常堆栈跟踪
Exception Report:
type Exception report
message Request processing failed; nested exception is java.lang.NullPointerException
description: The server encountered an internal error that prevented it from fulfilling this request.
exception:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.
org. springframework. web. servlet. FrameworkServlet . processRequest (FrarneworkServlet. java: 932)
org.springframework.web.servlet.FrameworkServlet.doGet(Frameworkservlet.java:816)
javax.servlet.http.HttpServlet.service (HttpServlet.java: 620)
org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java:801)
javax.servlet.http.Httpservlet.service(Httpservlet.java:727)
root cause
java.lang.NullPointerException
com. hello. services.ExcelService.buildExcelDocument (Excelservice.java:34)
org. springframework.web.servlet.view.document.AbstractExcelView.renderMergedoutputModel (AbstractE
org.springfranework.web.servlet.view.AbstractView.render (AbstractView.java:264)
org.springframework.web.servlet.DispatcherServlet.render (Dispatcherservlet.java: 1208)
org. springframework . web . serviet . DispatcherServlet . processDispatchResult (DispatcherServlet . java: 1208
org. springframework. web. servlet . DispatcherServlet . doDispatch (DispatcherServlet . java: 939)
org. springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:856)
org. springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java: 920)
org. springframework.web.servlet.FrameworkServlet.doGet (FrameeworkServlet.java:816)
javax.servlet.http.Httpservlet.service(Httpservlet.java: 620)
org.springframework.web.servlet.FrameworkServlet.service (FraneworkServlet.java:801)
javax.servlet.http.HttpServlet.service(Httpservlet.java:727)
【问题讨论】:
-
获取正确的数据到控制器并在视图中正确显示。生成excel表格的唯一问题
-
你能把迭代逻辑放在你得到错误的地方,同时粘贴错误的堆栈跟踪会很有帮助。
-
@SarfarazKhan:根据您的建议更新了异常。进入 for 循环时抛出异常。我觉得一旦我单击 excel 按钮,它就无法找到确切的线程。这就是它抛出异常的原因。你能建议我如何为每个请求独立生成 excel 报告
-
能够根据请求将结果正确地发送到 jsp 页面。但我无法正确生成 excel 表。
-
你用什么来生成excel文件?它是像 apache.poi 这样的库还是一些自定义代码?我的第一印象是您可能遇到了一个自动装箱问题,该问题在 ExcelService.java 第 34 行中引发了空指针异常。(即,您设置了一些原始值等于其包装类的空实例化版本,例如 int = null Integer)
标签: java multithreading spring spring-mvc