2016-07-14 4 views
2

In meiner Spring Boot-Anwendung, ich versuche, eine Antwort auf meine Antwort in der afterCompletion() Methode meiner HandlerInterceptorAdapter Klasse hinzuzufügen.Wie Header zu HTTP-Antwort in Spring HandlerInterceptorAdapter hinzufügen?

Der Regler liefert ein ResponseEntity<MyResource> Objekt wie:

return new ResponseEntity<>(mr, HttpStatus.OK); 

nach einem POST Anfrage.

Im Interceptor, wenn ich versuche, der Antwort einen Header hinzuzufügen, wird es nicht hinzugefügt.

Allerdings, wenn ich meinen Controller eine Antwort als diese zurück ändern:

return new ResponseEntity<>(HttpStatus.OK); 

Dann funktioniert es.

Warum könnte ich nur dann eine Kopfzeile hinzufügen, wenn der Antworttext fehlt?

Gibt es eine Möglichkeit, es hinzuzufügen, wenn der Antworttext vorhanden ist?

+0

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-handlermapping-interceptor –

+3

Beachten Sie, dass die Methode 'afterCompletion' von' HandlerInterceptor' nicht immer ideal geeignet ist zur Verwendung mit den Methoden '@ ResponseBody' und' ResponseEntity'. In solchen Fällen schreibt ein 'HttpMessageConverter' die Antwort, bevor 'afterCompletion' aufgerufen wird, und schreibt sie fest, was es unmöglich macht, die Antwort zu ändern, um beispielsweise einen Header hinzuzufügen. Stattdessen kann eine Anwendung 'ResponseBodyAdvice' implementieren und entweder als' @ ControllerAdvice'-Bean deklarieren oder direkt auf 'RequestMappingHandlerAdapter' konfigurieren. –

Antwort

1

Dank dem Kommentar von Ali Deghani, wurde ich in die richtige Richtung gezeigt und eine neue Klasse erstellt, die die AbstractMappingJacksonResponseBodyAdvice Klasse erweitert (die ResponseBodyAdvice darunter implementiert).

Ich habe auch einen Hauch von http://cubiccow.blogspot.co.za/2014/10/api-versioning-of-rest-services.html

Das erlaubte mir, erfolgreich die Antwort mit einem neuen Header zu ändern, basierend auf bestimmten Bedingungen, nachdem sie von der Steuerung verarbeitet wurde.

Verwandte Themen