在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>
现在我有控制器类和Utility类 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)
答案 0 :(得分:0)
正如你所指出的那样,异常就是在下面的行中抛出
for(Map.Entry entry:m.entrySet()){ - &gt;异常抛出
你得到这个异常,因为model.getResults(“results”)返回null。那么你的 m 被赋值为null并且在空引用上执行m.entrySet()这就是抛出空指针异常
所以你必须弄清楚为什么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
}
关于你关于线程安全的问题,它完全取决于你如何设计你的类并使用它,这很难通过查看几行来回答。但是,这可能不是线程安全的问题。