Spring Boot拦截所有异常处理程序
我正在尝试执行一些通用逻辑,这些逻辑适用@ExceptionHandler
于代码中的所有。我知道我可以写一个HandlerInterceptor
拦截幸福的道路。但是我想了解异常处理的生命周期,以便可以在呈现错误响应之前执行一些常见的逻辑,例如日志记录。
无论如何,在Spring Boot" title="Spring Boot">Spring Boot / Spring MVC中有这样做吗?如果可能的话,我想避免为此编写一个servlet过滤器。
回答:
我有解决办法。关于使用HandlerInterceptor.afterCompletion
方法。但是,此方法的文档中有一行指出:
注意:仅当此拦截器的preHandle方法成功完成并返回true时,才会调用它!
因此,诀窍是还实现preHandle
并使其返回true
。
现在我的拦截器看起来像这样:
@Componentpublic class MyInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// perform common logic here
}
}
但是要注意的一件事是,如果在抛出异常之前有一系列拦截器和一个拦截器,则该拦截器将没有机会执行。因此,如果我们对拦截器链进行重新排序MyInterceptor
,使其位于顶部,那么它将拦截所有请求。
以上是 Spring Boot拦截所有异常处理程序 的全部内容, 来源链接: utcz.com/qa/403371.html