HTTP Status 500 – Internal Server Error Type Exception Report Message Handler processing failed; nested exception is java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFCellStyle.setAlignment(S)V Description The server encountered an unexpected condition that prevented it from fulfilling the request. Exception org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFCellStyle.setAlignment(S)V org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1302) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:977) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:968) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:859) javax.servlet.http.HttpServlet.service(HttpServlet.java:635) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844) javax.servlet.http.HttpServlet.service(HttpServlet.java:742) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) com.rongdu.cashloan.core.common.web.filter.PerformanceMonitorFilter.doFilterWithProfile(PerformanceMonitorFilter.java:57) com.rongdu.cashloan.core.common.web.filter.PerformanceMonitorFilter.doFilter(PerformanceMonitorFilter.java:43) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) com.rongdu.cashloan.core.common.web.filter.RemoteAddressFilter.doFilter(RemoteAddressFilter.java:51) org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) Root Cause
我的解決思路:
首先,我查看了業務代碼,在導出Excel表格的時候需要一些必要的參數,標題,打印數據,Excel表格格式等....先確保業務代碼沒有問題。
第二,在確保業務代碼沒有問題的前提下,分析異常,(Message Handler processing failed; nested exception is java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFCellStyle.setAlignment(S)V)提示信息為沒有找到當前方法。如果找不到方法,那么編譯的時候是不是應該提示出來。既然編譯的時候沒有報錯,運行時出現,最有可能的是沒有找到相應的包,找不到包的錯誤有一下幾種
1.jar包沒有導入;
2.jar存在,版本不正確;
3.jar存在,都放在lib下,由於引入的其他jar有使用同樣的jar,但是版本不一樣。導致jar包沖突。
第1種,在maven中添加,不是maven項目的,自行加入lib中。
第2種和第3種,打印使用類的引用路徑。用以確定包的具體路徑。然后反編譯看看里面是否有相應的方法。如果有還會報錯,那要么換高版本的,要么換低版本的包(HSSFWorkbook類名)
System.out.println("引用包路徑為:"+HSSFWorkbook.class.getProtectionDomain().getCodeSource().getLocation());
第三,由於業務暫時不需要使用另外一個第三方的jar,我直接在pom中添加<scope>provided</scope>,也可以在對應的jar包中添加
<exclusions>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
</exclusion>
</exclusions>
第四,可以使用Maven Helper對jar的依賴關系進行分析,詳細請參考:https://blog.csdn.net/noaman_wgs/article/details/81137893,由於講的很詳細,不在描述。
參考路徑:
https://www.cnblogs.com/qxqbk/p/7655307.html