2016-07-23 4 views
4

Ich habe eine Anforderung, meine HttpResponse zu bearbeiten, um Header-Wert hinzuzufügen. Ich suchte nach einem einzelnen Punkt, um es zu implementieren und fand, dass ResponseBodyadvice hilfreich wäre.Wie implementiert ResponseBodyAdvice auf allen Controllern?

Aber beide Methoden, die in meiner neuen Klasse überging, wurde nie aufgerufen. Könnten Sie mir bitte sagen, ob ich irgendwelche Konfigurationen verpasst habe?

@ControllerAdvice 
public class EditResponseHeader implements ResponseBodyAdvice<object> { 


@Override 
public boolean supports(MethodParameter returnType, 
     Class<? extends HttpMessageConverter<?>> converterType) { 

    return true; 
} 

.... 

@Override 
public Object beforeBodyWrite(Object body, MethodParameter returnType, 
     MediaType selectedContentType, 
     Class<? extends HttpMessageConverter<?>> selectedConverterType, 
     ServerHttpRequest request, ServerHttpResponse response) { 

    .... 

    return body; 
} 

} 
+0

Alle meine Controller @RequestMapping Annotation und mvc haben, ist Anmerkung angetrieben. Ich verwende auch MappingJackson2Json als Standardansichten – Ultimata

Antwort

0

Was:

@Override 
@ExceptionHandler(Exception.class) 
     public Response<?> beforeBodyWrite(Response<?> body, MethodParameter returnType, 
       MediaType selectedContentType, 
       Class<? extends HttpMessageConverter<?>> selectedConverterType, 
       ServerHttpRequest request, ServerHttpResponse response) { 

      .... 

      return body; 
     } 
+0

Wie würde der Rückgabetyp von beforeBodyWrite zu Antwort von Objekt Angelegenheit ändern? – Ultimata

+0

kann der folgende Link Ihnen helfen, eine Lösung zu finden. http://stackoverflow.com/questions/21884737/controlleradvice-not-branding –

+2

Wenn ich eine Methode mit '@ InitBinder' oder '@ ExceptionHandler' annotiert, dann funktioniert es gut, aber' @ ExceptionHandler' wird nur aufgerufen, wenn Ausnahme ist geworfen und '@ initBinder' wird aufgerufen, bevor der Controller ausgeführt wird. Meine Anforderung besteht darin, diese Methode aufzurufen, nachdem jeder Controller ausgeführt wurde, nicht nur, wenn eine Ausnahme ausgelöst wird. – Ultimata

Verwandte Themen