#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, копиями с одинаковой строкой запроса и т. Д.