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

 

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