2015-05-05 8 views
16

Korzystam ze sprężynowego szkieletu MVC. Chcę rejestrować statusy błędów za każdym razem, gdy zgłaszany jest wyjątek, więc metoda afterCompletion jest używana w HanlderInterceptor.HandlerInterceptor.afterCompletion() na wiosnę MVC zmienia kod odpowiedzi

@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); 
} 

Ten kod działa poprawnie, jeśli uruchamiam to jako aplikację na komputerze lokalnym. Ale kiedy hostujemy go na serwerze pomostu, interfejs użytkownika otrzymuje poprawną odpowiedź o błędzie (w moim przypadku 409), ale w tej metodzie jest rejestrowany jako 200.

[Obrazek ze zdalnego debugowania gdzie pokazuje status=200 ale w odpowiedzi to 409] enter image description here

Czy ktoś mógłby pomóc, aby dowiedzieć się, dlaczego jest zmiana kodu odpowiedzi?

Używam sprintu 1.1.7.RELEASE wiosna wersji boot i jetty-distribution-9.2.10.v20150310.

+0

Gdzie jest kod 409 Stan ustawić? Możliwe, że jest ustawiony po ustawieniu statusu HandlerInterceptor.afterCompletion() – medvedev1088

+0

409 zanim wywołany zostanie HandlerInterceptor.afterCompletion(). – subhashlg26

+0

Czy zaimplementowałeś 'HandlerInterceptor' lub podklasę jednej z implementacji? – Leon

Odpowiedz

1

Musisz się upewnić, że wywołasz metodę setStatus na obiekcie response na wyjątku.

Jeśli to potwierdzisz, to aktualizacja do wersji rozruchowej 1.1.11 może rozwiązać problem. Dotyczy to fix. Przed poprawką, ErrorPageFilter maskował status odpowiedzi zawijanej odpowiedzi w przypadkach, w których metoda sendError nie została wyraźnie wywołana na .

Kod po ustalonej changed od prostych return this.status do

 if (this.errorToSend) { 
      return this.status; 
     } 
     else { 
      // If there was no error we need to trust the wrapped response 
      return super.getStatus(); 
     } 

dlatego wierzę, że uaktualnienie będzie rozwiązać problem.

Wreszcie, jeśli utrzymują się wydawać, debugowanie przez ErrorPageFilter powinny wskazać pochodzenie problemu

Powiązane problemy