Spring Boot拦截所有异常处理程序

我正在尝试执行一些通用逻辑,这些逻辑适用@ExceptionHandler于代码中的所有。我知道我可以写一个HandlerInterceptor拦截幸福的道路。但是我想了解异常处理的生命周期,以便可以在呈现错误响应之前执行一些常见的逻辑,例如日志记录。

无论如何,在Spring Boot" title="Spring Boot">Spring Boot / Spring MVC中有这样做吗?如果可能的话,我想避免为此编写一个servlet过滤器。

回答:

我有解决办法。关于使用HandlerInterceptor.afterCompletion方法。但是,此方法的文档中有一行指出:

注意:仅当此拦截器的preHandle方法成功完成并返回true时,才会调用它!

因此,诀窍是还实现preHandle并使其返回true

现在我的拦截器看起来像这样:

@Component

public 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

回到顶部