spring mvc异常统一处理(实现HandlerExceptionResolver接口)不生效的问题解决

版权声明:本文为博主(yjclsx)的原创文章,未经博主允许不得转载。 https://blog.csdn.net/yjclsx/article/details/85230380

spring mvc异常统一处理常见的有3种方式:

  1. 使用 @ ExceptionHandler 注解
  2. 实现 HandlerExceptionResolver 接口
  3. 使用 @controlleradvice 注解

详细的使用方法可参考博文:https://blog.csdn.net/yjclsx/article/details/85230404

有一次在实现HandlerExceptionResolver接口的方式进行统一异常处理时,发现并没有起作用,如下:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @ClassName GlobalExceptionHandler
 * @Author jcyao
 * @Description
 * @Date 2018/12/24 9:47
 * @Version 1.0
 */
@Component
public class GlobalExceptionHandler implements HandlerExceptionResolver {

    private static final Logger logger = LoggerFactory.getLogger("SHIZAI_LOGGER");

    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        logger.error("统一异常处理捕获了异常,请求地址:"+httpServletRequest.getRequestURL(),e);
        return null;
    }
}

在日志中并没有打印出异常捕获的信息。

最后在spring的bean配置文件中加上了<bean>配置后,就可以了,如下:

<bean id="handlerExceptionResolver" class="com.dingtalk.isv.access.web.interceptor.GlobalExceptionHandler"/>

加上了<bean>配置,就不需要在异常处理类中加@Component注解了。

原因是springmvc从容器中取自定义异常处理器时是通过指定的id去取的,这个id默认是handlerExceptionResolver。

猜你喜欢

转载自blog.csdn.net/yjclsx/article/details/85230380