2015-05-05 4 views
16

Я использую Spring MVC framework. Я хочу регистрировать статусы ошибок всякий раз, когда генерируется исключение, поэтому метод afterCompletion используется в HanlderInterceptor.HandlerInterceptor.afterCompletion() весной MVC меняет код ответа

@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 boot version и jetty-distribution-9.2.10.v20150310.

+0

Где установлен код 409 статус? Возможно, он установлен после того, как статус HandlerInterceptor.afterCompletion() – medvedev1088

+0

409 установлен до вызова HandlerInterceptor.afterCompletion(). – subhashlg26

+0

Вы реализовали «HandlerInterceptor» или подкласс одной из реализаций? – Leon

ответ

1

Вам необходимо убедиться, что вы вызываете метод setStatus на свой response объект по исключению.

Если вы утвердите это, то обновление вашей версии 1.1.11 может привести к исправлению вашей проблемы. Это касается fix. До исправления ErrorPageFilter маскировал статус ответа обернутого ответа в случаях, когда метод sendError явно не вызывается на ErrorWrapperResponse.

Код после фиксированного changed от простого 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 следует указать происхождение проблемы