2011-05-30 7 views
15

Comment puis-je renvoyer JSON à partir du contrôleur de ressort en tant que vue ou ModelAndView? L'annotation @ResponseBody ne m'intéresse pas. Y a-t-il un autre moyen de le faire?spring: renvoie JSON du contrôleur en tant que ModelAndVIew

+0

Spring a 'ContentNegotiatingViewResolver', qui peut renvoyer dynamiquement une vue" droite "basée sur le suffixe ou l'en-tête' Accept'. [link] (http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-multiple-representations). Vous fournissez à la fois le modèle et la vue dans 'ModelAndView', laissez Spring faire la résolution de la vue. – Hong

Répondre

0

Vous pouvez utiliser la classe org.codehaus.jackson.map.ObjectMapper pour écrire des chaînes json dans le flux de sortie. Utilisez le code suivant dans la méthode de votre contrôleur:

ObjectMapper mapper = new ObjectMapper(); 
mapper.writeValue(outputStream, model); 
outputStream.flush(); 
+0

Si votre version de Spring est suffisamment élevée, l'objet MappingJacksonJsonView utilise ObjectMapper de Jackson pour sérialiser le modèle. Référence http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/servlet/view/json/MappingJacksonJsonView.html –

27

Oui, vous pouvez retourner un MappingJacksonJsonView ou l'affecter à un objet en utilisant ModelAndViewmav.setView(new MappingJacksonJsonView()).

Mise à jour: Au printemps 4 MappingJacksonJsonView est deprecated. Vous pouvez mettre à niveau vers MappingJackson2JsonView

+7

Pour plus d'informations, vous pouvez définir le nom de la vue MOdelAndView sur une instance de MappingJacksonJsonView pour renvoyer un objet JSON à la place de ModelAndView. Un exemple ressemblerait à: 'ModelAndView mav = new ModelAndView (nouveau MappingJacksonJsonView()); mav.addObject ("key1", "value1"); mav.addObject ("key2", "value2"); ' Renvoyer' mav' produirait alors un objet JSON de la forme: '{" key1 ":" value1 "," key2 ":" value2 "} ' – JCoster22

+1

Mise à jour: J'ai utilisé [MappingJackson2JsonView] (http://docs.spring.io/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/view/json/MappingJackson2JsonView.html) pour le au dessus. – JCoster22

Questions connexes