SpringMVC全局異常處理的三種方式
在 JavaEE 項目的開發(fā)中,不管是對底層的數(shù)據(jù)庫操作過程,還是業(yè)務層的處理過程,還是控制層的處理過程,都不可避免會遇到各種可預知的、不可預知的異常需要處理。每個過程都單獨處理異常,系統(tǒng)的代碼耦合度高,工作量大且不好統(tǒng)一,維護的工作量也很大。
SpringMvc 對于異常處理這塊提供了支持,通過 SpringMvc 提供的全局異常處理機制,能夠?qū)⑺蓄愋偷漠惓L幚韽母鱾€處理過程解耦出來,這樣既保證了相關處理過程的功能較單一,也實現(xiàn)了異常信息的統(tǒng)一處理和維護。
SpringMVC全局異常處理的三種方式
- 使用 Spring MVC 提供的簡單異常處理器 SimpleMappingExceptionResolver;
- 實現(xiàn) Spring 的異常處理接口 HandlerExceptionResolver 自定義自己的異常處理器;
- 使用 @ExceptionHandler 注解實現(xiàn)異常處理;
案例實操
全局異常處理方式一
配置 SimpleMappingExceptionResolver 對象
<bean class="org.springframework.web.servlet.handler.SimpleMappingException Resolver">
<property name="defaultErrorView" value="error"></property>
<property name="exceptionAttribute" value="ex"></property>
<property name="exceptionMappings">
<props>
<prop key="com.xxx.exception.BusinessException">error1</prop>
<prop key="com.xxx.exception.ParamsException">error2</prop>
</props>
</property>
</bean>
全局異常處理方式二
實現(xiàn) HandlerExceptionResolver 接口
@Component
public class GlobalException implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
Map<String,Object> map=new HashMap<String, Object>();
map.put("ex", ex);
ModelAndView mv=null;
if(ex instanceof ParamsException){
return new ModelAndView("error_param", map);
}
if(ex instanceof BusinessException){
return new ModelAndView("error_business", map);
}
return new ModelAndView("error", map);
}
}
使用實現(xiàn) HandlerExceptionResolver 接口的異常處理器進行異常處理,具有集成簡單、有良好的擴展性、對已有代碼沒有入侵性等優(yōu)點,同時,在異常處理時能獲取導致出現(xiàn)異常的對象,有利于提供更詳細的異常處理信息。
全局異常處理方式三
頁面處理器繼承 BaseController
public class BaseController {
@ExceptionHandler
public String exc(HttpServletRequest request,HttpServletResponse
response,Exception ex){
request.setAttribute("ex", ex);
if(ex instanceof ParamsException){
return "error_param";
}
if(ex instanceof BusinessException){
return "error_business";
}
return "error";
}
}
使用 @ExceptionHandler 注解實現(xiàn)異常處理,具有集成簡單、有擴展性好(只需要將要異常處理的 Controller 類繼承于 BaseController 即可)、不需要附加 Spring 配置等優(yōu)點,但該方法對已有代碼存在入侵性(需要修改已有代碼,使相關類繼承于 BaseController),在異常處理時不能獲取除異常以外的數(shù)據(jù)。
擴展~未捕獲異常的處理
對于 Unchecked Exception 而言,由于代碼不強制捕獲,往往被忽略,如果運行期產(chǎn)生了 Unchecked Exception,而代碼中又沒有進行相應的捕獲和處理,則我們可能不得不面對尷尬的 404、500……等服務器內(nèi)部錯誤提示頁面。我們需要一個全面而有效的異常處理機制。目前大多數(shù)服務器也都支持在 Web.xml 中通過 (Websphere/Weblogic) 或者 (Tomcat) 節(jié)點配置特定異常情況的顯示頁面。修改 web.xml 文件,增加以下內(nèi)容: java.lang.Throwable /500.jsp 500 /500.jsp 404 /404.jsp
以上就是SpringMVC全局異常處理的三種方式的詳細內(nèi)容,更多關于SpringMVC全局異常處理的資料請關注腳本之家其它相關文章!
相關文章
SpringCloud Gateway的路由,過濾器和限流解讀
這篇文章主要介紹了SpringCloud Gateway的路由,過濾器和限流解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
2024版本IDEA創(chuàng)建Servlet模板的圖文教程
新版IDEA?2024.1.4中,用戶需要自行創(chuàng)建Servlet模板以解決Web項目無法通過右鍵創(chuàng)建Servlet的問題,本文詳細介紹了添加ServletAnnotatedClass.java模板的步驟,幫助用戶快速配置并使用新的Servlet模板,需要的朋友可以參考下2024-10-10
詳解SpringBoot構(gòu)建的Web項目如何在服務端校驗表單輸入
這篇文章主要介紹了詳解SpringBoot構(gòu)建的Web項目如何在服務端校驗表單輸入,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10
Java字節(jié)流與基本數(shù)據(jù)類型的轉(zhuǎn)換實例
本篇文章主要介紹了Java字節(jié)流與基本數(shù)據(jù)類型的轉(zhuǎn)換實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
Java lambda list轉(zhuǎn)換map時,把多個參數(shù)拼接作為key操作
這篇文章主要介紹了Java lambda list轉(zhuǎn)換map時,把多個參數(shù)拼接作為key操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08

