Spring MVC 3.2 @ResponseBody intercepteur
Dans notre application, nous sommes à l'aide de JSON pour la demande et la réponse. Le contrôleur de méthodes annotées avec @RequestBody(). L'objet retourné par exemple TransferResponse. Je voudrais, à s'emparer de cet objet, la forme @ResponseBody. J'ai mis un intercepteur postHandle méthode:
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws java.lang.Exception
{
....
}
Alors, comment puis-je obtenir le JSON dans ce postHandle méthode?
Merci d'avance
GM
C'est une bonne idée. Je ne pense pas que vous pouvez obtenir à la
@ResponseBody
objet tel qu'il est manipulé (organisées dans le servlet de la réponse du flux de sortie) longtemps avant que le contrôle retourne à DispatcherServlet
(qui est responsable de l'appel du gestionnaire d'intercepteurs). En fonction de votre cas d'utilisation, vous devrez trouver un autre moyen.OriginalL'auteur user2279337 | 2013-06-24
Vous devez vous connecter pour publier un commentaire.
Comme Pavel Horal déjà mentionné, lorsque
postHandle()
méthode est appelée, le corps de la réponse de l'objet est déjà converti en JSON et écrite de réponse. Vous pouvez essayer d'écrire vos propres annotations personnalisées et aspect dans le but d'intercepter le contrôleur le corps de la réponse des objets.Activer le support pour AspectJ aspects à l'aide de
@EnableAspectJAutoProxy
OriginalL'auteur Andrei Zagorneanu
J'ai enfin un travail (mais pas très élégant) solution pour ce cas.
Je pense que peut avoir une meilleure solution, mais je ne trouve pas que.
D'abord, j'ai créé une Requête et de Réponse wrapper qui encapsule la charge utile, faire ma demande de Flux d'Entrée et de la réponse au Flux de Sortie reutilizable et substituables.
J'ai besoin de l'utiliser dans mon Filtre à manipuler à la fois la demande et la réponse des charges.
OriginalL'auteur caioquirino
Comme Pavel dit, vous ne pourrez probablement pas obtenir la réponse JSON de cette façon. Je pense que le meilleur pari est de mettre en œuvre un Filtre qui ressemble à la réponse avant de les écrire sur le client. Jetez un oeil à OncePerRequestFilter pour un point de départ.
OriginalL'auteur Jukka
Depuis que la question a été posté, ResponseBodyAdvice a été ajouté dans Spring MVC 4.1. Cette interface permet aux applications de modifier ou de changer complètement le corps, avant que le convertisseur est appliquée. Le documentation pour l'interception des requêtes a également été mis à jour spécifiquement pour cette question:
OriginalL'auteur SenoCtar