【问题标题】:Issue with generating excel sheets in a web application在 Web 应用程序中生成 Excel 工作表的问题
【发布时间】: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


【解决方案1】:

正如您所指出的,异常正在以下行中引发

for(Map.Entry entry: m.entrySet()){ -->抛出异常

您收到此异常是因为 model.getResults("results") 返回 null。因此您的 m 被分配为 null 并且在 null 引用上执行 m.entrySet() this 会引发空指针异常.

所以你必须弄清楚为什么 model.getResults("results") 返回 null 并修复它。如果可能出现没有生成 excel 表并且 model.getResults("results") 将返回 nulll 的情况。然后你必须在你的代码中提供适当的检查。下面是一个检查,但它可能还不够,因为你可能需要处理更多的东西。

if(m!=null){
  for(Map.Entry<Integer,String> entry: m.entrySet()){ -->Exception is throwing
    //excel sheet logiic
  }
  //iteration logic  ----> Exception thrown here
}

关于你关于线程安全的问题,这完全取决于你是如何设计你的类和使用它的,仅仅看几行就很难回答。但是,这可能不是线程安全的问题。

【讨论】: