spring mvc 異常統一處理

        最近在項目中發現Controller層的很多接口都是先打日誌再拋出異常,於是想到使用mvc提供的異常統一處理方法來減少打印日誌的代碼。查詢發現已有使用@ControllerAdvice + @ExceptionHandler註解的異常處理類,但並不生效,打斷點也進不去。網上查詢資料說可能缺少<mvc:annotation-driven>、已有其它方式異常處理機制等,後來發現那個類前面沒有識別爲bean的綠色圖標,原來掃描類時漏過了這個文件夾。

主要有以下幾種方式:

1、使用HandlerExceptionResolver接口

//HandlerExceptionResolver接口方式
public class ExceptionTest implements HandlerExceptionResolver{

    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        return null;
    }
}

2、使用@ControllerAdvice + @ExceptionHandler註解

//註解方式
@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseBody
    String handleException(){
        return "Exception Deal!";
    }
}

3、配置文件中配置

<!-- Spring MVC提供的簡單異常處理器SimpleMappingExceptionResolver-全局異常配置 start -->     
      <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
       <!--   默認的錯誤信息頁面 -->
        <property name="defaultErrorView" value="error"/>
        <property name="exceptionMappings">
            <props>
                <prop key="java.lang.NullPointerException">commons/error/error_spring_null</prop>
                <prop key="java.lang.ArithmeticException">commons/error/error_spring_math</prop>
            </props>
        </property>
    </bean>   
<!-- 全局異常配置 end -->     

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章