2015-05-05 8 views
16

Ich benutze Feder MVC Rahmen. Ich möchte Fehlerstatus protokollieren, wann immer eine Ausnahme ausgelöst wird, also afterCompletion Methode wird in HanlderInterceptor verwendet.HandlerInterceptor.afterCompletion() im Frühjahr MVC ändert Antwortcode

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

Dieser Code funktioniert gut, wenn ich dies als eine Anwendung auf dem lokalen Rechner ausführen. Aber wenn wir es auf dem Anlegestegserver hosten, erhält die Benutzeroberfläche die korrekte Fehlerantwort (in meinem Fall 409), aber bei dieser Methode wird sie als 200 geloggt.

[Bild von Remote-Debug wo es status=200 zeigt aber in Reaktion ist es 409] enter image description here

Kann jemand helfen, herauszufinden, warum es Änderung des Antwortcode ist?

Ich verwende Sprint 1.1.7.RELEASE Springboot-Version und Jetty-Distribution-9.2.10.v20150310.

+0

Wo ist 409-Statuscode gesetzt? Es ist möglich, dass es nach dem HandlerInterceptor gesetzt wird. AfterCompletion() – medvedev1088

+0

409 Status wird festgelegt, bevor HandlerInterceptor.afterCompletion() aufgerufen wird. – subhashlg26

+0

Haben Sie 'HandlerInterceptor' oder Unterklasse einer der Implementierungen implementiert? – Leon

Antwort

1

Sie müssen sicherstellen, dass Sie setStatus Methode auf Ihrem response Objekt auf Ausnahme aufrufen.

Wenn Sie dies bestätigen, kann ein Upgrade auf Spring Boot Version 1.1.11 Ihr Problem beheben. Es betrifft diese fix. Vor dem Fix maskierte der ErrorPageFilter den Antwortstatus der umhüllten Antwort in den Fällen, in denen die sendError-Methode nicht explizit auf ErrorWrapperResponse aufgerufen wird.

Der Code nach dem festen changed von einfachen return this.status zu

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

, warum ich, dass das Upgrade Ihr Problem behebt glauben ist.

Schließlich, wenn Sie anhalten erteilen, Debugging durch ErrorPageFilter sollte den Ursprung des Problems zeigen