java - Spring Web - AsyncHandlerInterceptor 中的两个连续 HTTP 请求,而 HTTP 500?
问题描述
我AsyncHandlerInterceptor
在我的 Spring 应用程序(问题的简化版本)中有这个,用于将所有 HTTP 请求记录到数据库中。
@Component
public class LoggingInterceptor implements AsyncHandlerInterceptor {
@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) {
// Logging HTTP request into database here...
}
}
在实现中激活拦截器WebMvcConfigurer
:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loggingInterceptor).order(Integer.MAX_VALUE - 1);
}
它按我的预期工作,但是当目标控制器抛出异常(HTTP 500)时,拦截器会记录两个请求而不是一个。第一个是 HTTP 200 OK
,第二个(紧跟在第一个之后)正确记录 HTTP 500 Internal Server Error
。我想避免第一个。
问:拦截器记录两个请求是否有任何应用原因或我的配置错误?
解决方案
推荐阅读
- sonarqube - SonarQube 多模块多子文件夹项目配置
- django - 在模板 django 中渲染数据库值
- c# - PutObjectAsync 在第一次运行时停止运行代码 - 无异常抛出
- laravel - 拉拉维尔 | 找不到类
- linux - 通过 USB 驱动器复制 git repo 会导致所有文件显示为已修改
- algorithm - 您如何将付费电话建模为状态机?
- asp.net-mvc - 如何立即访问保存的行
- git - 如何只为“git log”节俭“git clone”?
- java - 在 Windows 上直接获得 Java 可访问性
- plsql - 仅在 Oracle PL/SQL 中等效的 Oracle APEX_COLLECTIONS