Spring MVC 3.2 @ResponseBody interceptor
In unserer Anwendung, die wir verwenden JSON für Anfrage und Antwort. Die controller-Methoden sind annotiert mit @RequestBody(). Das Objekt wird zurückgegeben, z.B. TransferResponse. Ich möchte halt diese Objekte bilden die @ResponseBody. Ich habe setup ein interceptor postHandle Methode:
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws java.lang.Exception
{
....
}
So, wie bekomme ich die JSON-in diesem postHandle Methode?
Vielen Dank im Voraus
GM
Dies ist ein guter. Ich glaube nicht, dass Sie bekommen können, um die
@ResponseBody
Objekt, wie es gehandhabt wird (umgewandelt in servlet-response-output-stream), lange bevor die Kontrolle zurück DispatcherServlet
(die verantwortlich ist für den Aufruf von handler-Abfangjäger). Je nach Anwendungsfall müssen Sie einen anderen Weg finden.InformationsquelleAutor user2279337 | 2013-06-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Pavel Horal bereits erwähnt, wenn
postHandle()
Methode aufgerufen wird, wird der Nachrichtentext der Antwort Objekt bereits konvertiert zu JSON und geschrieben zur Antwort. Sie können versuchen, zu schreiben, Ihre eigenen benutzerdefinierten annotation und Aspekt, um das abfangen der controller-Antwort der Körper-Objekte.Aktivieren Sie die Unterstützung für AspectJ-Aspekte über
@EnableAspectJAutoProxy
InformationsquelleAutor Andrei Zagorneanu
Habe ich endlich eine funktionierende (aber nicht elegante) Lösung für diesen Fall.
Ich denke, dass können haben eine bessere Lösung, aber ich kann nicht finden, dass.
Zuerst, ich wurde ein Request-und Response-wrapper kapselt die Nutzlast, so dass mein Wunsch Input-Stream-und-Antwort-Stream-Ausgabe reutilizable und überschreibbare.
Ich habe diese in meinen Filter zu manipulieren, um sowohl die Anfrage-und die Antwort-payloads.
InformationsquelleAutor caioquirino
Wie Pavel schon sagte, Sie wahrscheinlich nicht bekommen, die response-JSON auf diese Weise. Ich denke, die beste Wette ist, um zu implementieren eine Filter das sieht die Antwort vor dem schreiben Sie es an den client. Haben Sie einen Blick auf OncePerRequestFilter für ein Ausgangspunkt.
InformationsquelleAutor Jukka
Da die Frage gepostet wurde, ResponseBodyAdvice wurde Hinzugefügt, Spring MVC 4.1. Diese Schnittstelle erlaubt, Anwendungen zu ändern oder vollständig zu verändern, den Körper, bevor der Konverter angewendet wird. Die Dokumentation für das abfangen von Anfragen wurde ebenfalls aktualisiert, der speziell für diese Ausgabe:
InformationsquelleAutor SenoCtar