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開發,覺得我的文章有幫助的小夥伴可以關注我,有疑問可評論私信,相逢即是緣,大家高處見

在這裡插入圖片描述

相關文章