Spring Web — два последовательных HTTP-запроса в AsyncHandlerInterceptor при HTTP 500?

#java #spring-boot #interceptor

#java #весенняя загрузка #перехватчик

Вопрос:

У меня есть это 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 . Я хотел бы избежать первого.

Вопрос: Есть ли какая-либо причина, по которой перехватчики регистрируют два запроса, или у меня неправильная конфигурация?

Комментарии:

1. Возможно, одним из этих запросов является метод OPTIONS . Не могли бы вы попробовать с помощью curl -v получить подробный журнал и сравнить трассировки успеха и ошибок?

2. Оба являются POST, копиями с одинаковой строкой запроса и т. Д.