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"/>

以上就是SpringMVC系列的第四章,主要側重SpringMVC異常處理的相關解析,我後續會持續更新我的學習內容,本博客主要側重於數據結構於算法和java開發,覺得我的文章有幫助的小夥伴可以關注我,有疑問可評論私信,相逢即是緣,大家高處見

在這裡插入圖片描述