HandlerInterceptor.afterCompletion() в spring MVC изменяет код ответа
Я использую spring структуру MVC. Я хочу регистрировать статусы ошибок всякий раз, когда генерируется исключение, поэтому метод afterCompletion
используется в HanlderInterceptor
.
@Override
public void afterCompletion( final HttpServletRequest request, final HttpServletResponse response, final Object handler, final Exception ex)
{
final int responseCode = response.getStatus();
s_logger_error.error("status code: " + responseCode );
}
Этот код отлично работает, если я запускаю его как приложение на локальном компьютере. Но когда мы размещаем его на сервере причалов, UI получает правильный ответ об ошибке (в моем случае 409
), но в этом методе он регистрируется как 200
.
[Изображение из удаленного отладки, где он показывает status=200
, но в ответ это 409
]
![enter image description here]()
Может кто-нибудь помочь выяснить, почему в коде ответа есть изменения?
Я использую sprint 1.1.7.RELEASE spring загрузочную версию и причал-распределение-9.2.10.v20150310.
Ответы
Ответ 1
Вам нужно убедиться, что вы вызываете метод setStatus
объекта response
при исключении.
Если вы это подтвердите, то при обновлении до версии spring версия для загрузки 1.1.11 может исправить вашу проблему. Это относится к fix. До исправления, ErrorPageFilter
маскировал статус ответа завернутого ответа в случаях, когда метод sendError
явно не вызван в ErrorWrapperResponse
.
Код после фиксированного изменен от простого return this.status
до
if (this.errorToSend) {
return this.status;
}
else {
// If there was no error we need to trust the wrapped response
return super.getStatus();
}
поэтому я считаю, что обновление решит вашу проблему.
Наконец, если вы решите проблему, отладка через ErrorPageFilter
должна указывать на происхождение проблемы