SpringMVC異常的處理機制
- 2020 年 10 月 22 日
- 筆記
SpringMVC異常的處理機制
處理流程圖
其本質還是把異常交給SpringMVC框架來處理
系統的dao、service、controller出現異常都通過throws Exception向上拋出,最後由springmvc前端控制器交由異常處理器進行異常處理。springmvc提供全局異常處理器(一個系統只有一個異常處理器)進行統一異常處理。
1.異常處理的兩種方式
1.使用Spring MVC提供的簡單異常處理器SimpleMappingExceptionResolver
2.實現Spring的異常處理接口HandlerExceptionResolver 自定義自己的異常處理器
1.使用Spring MVC提供的簡單異常處理器SimpleMappingExceptionResolver
處理邏輯:使用Spring MVC提供的簡單異常處理器SimpleMappingExceptionResolver,處理器實現HandlerExceptionResolver 接口,全局異常處理器需要實現該接口
SimpleMappingExceptionResolver:就是通過簡單的映射關係來決定由哪個視圖,來處理當前的錯誤信息。
SimpleMappingExceptionResolver:提供通過異常類型exceptionMappings,來進行異常與視圖之間的映射關係,提供在發生異常時,通過statusCodes來映射異常返回的視圖名稱和對應的HttpServletResponse的返回碼。而且可以通過defaultErrorView和defaultErrorCode來指定默認值,defaultErrorView表示當沒有在exceptionMappings裏面找到對應的異常類型時,就返回defaultErrorView定義的視圖,defaultErrorCode表示在發生異常時,當沒有在視圖與返回碼的映射關係statusCodes裏面找到對應的映射時,默認返回的返回碼。
在使用SimpleMappingExceptionResolver時,當發生異常的時候,SimpleMappingExceptionResolver將會把當前的異常對象放到自身屬性exceptionAttribute中,當沒有指定exceptionAttribute時,exceptionAttribute就是用默認值exception
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!--默認錯誤視圖-->
<!--即找不到默認的錯誤類型的時候就默認使用這個-->
<property name="defaultErrorView" value="defaulterror"/>
<!--具體類型報錯的錯誤視圖-->
<property name="exceptionMappings">
<map>
<entry key="java.lang.ClassCastException" value="ClassCastException"/>
</map>
</property>
</bean>
2.實現Spring的異常處理接口HandlerExceptionResolver 自定義自己的異常處理器
2.1實現HandlerExceptionResolver
package com.pjh.Myexception;
import com.sun.org.apache.bcel.internal.generic.MONITORENTER;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyexceptionResolver implements HandlerExceptionResolver {
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView modelAndView = new ModelAndView();
if (e instanceof MyEcxeption){
//對於自定義異常的操作
}else{
//對於非自定義異常的操作
}
return modelAndView;
}
}
2.2在配置文件中配置
<bean class="com.pjh.Myexception.MyexceptionResolver"/>