版权声明:本文为博主(yjclsx)的原创文章,未经博主允许不得转载。 https://blog.csdn.net/yjclsx/article/details/85230380
spring mvc异常统一处理常见的有3种方式:
- 使用 @ ExceptionHandler 注解
- 实现 HandlerExceptionResolver 接口
- 使用 @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。