1. 程式人生 > >SpringMVC全域性異常統一處理

SpringMVC全域性異常統一處理

(1)使用Spring MVC提供的簡單異常處理器SimpleMappingExceptionResolver:

<!-- springmvc提供的簡單異常處理器 -->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

        <!--定義預設的異常處理頁面,當該異常型別的註冊時使用-->
        <property name="defaultErrorView" value="error"></property>
        <!--定義異常處理頁面用來獲取異常資訊的變數名,預設名為exception-->
        <property name="exceptionAttribute" value="ex"></property>

        <!-- 定義需要特殊處理的異常,這是重要點 -->
        <property name="exceptionMappings">
            <props>
                <!--key為異常類名,unauthorized為跳轉頁面-->
                <prop key="org.apache.shiro.authz.AuthorizationException">unauthorized</prop>
                <!-- 這裡還可以繼續擴充套件對不同異常型別的處理 -->
            </props>
        </property>
    </bean>
(2)實現Spring的異常處理介面HandlerExceptionResolver 自定義自己的異常處理器;

(3)使用@ExceptionHandler註解實現異常處理。

@ControllerAdvice
public class BaseException {

    @ExceptionHandler(ArithmeticException.class)
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    public Map<String, Object> handleBusException(Exception e) {
        Map<String, Object> map = new HashMap();
        if (e instanceof MyException){
            map.put("resCode","500");
            map.put("message","myException");
        }
        if (e instanceof ArithmeticException){
            map.put("resCode","500");
            map.put("message","ArithmeticException");
        }
        return map;
    }

@ControllerAdvice 全域性的,該註解使@ExceptionHandler可以監控全域性的異常

@ResponseStatus 指定返回狀態碼