2011-05-30 55 views
15

如何从弹簧控制器返回JSON作为视图或ModelAndView?我对使用@ResponseBody注释不感兴趣。有没有其他的方式来做到这一点?spring:从控制器返回JSON作为ModelAndVIew

+0

Spring有'ContentNegotiatingViewResolver',它可以根据后缀或'Accept'头部动态地返回“右”视图。 [链接](http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-multiple-representations)。您在'ModelAndView'中提供模型和视图,让Spring执行视图解析。 – Hong 2017-02-28 05:17:17

回答

0

您可以使用org.codehaus.jackson.map.ObjectMapper类将json字符串写入输出流。使用下面的代码片段在你的控制器的方法:

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

如果您的Spring版本足够高,那么MappingJacksonJsonView对象使用Jackson的ObjectMapper来序列化模型。参考http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/servlet/view/json/MappingJacksonJsonView.html – 2012-03-21 18:34:50

27

是的,你可以返回一个MappingJacksonJsonView或者其指定为使用mav.setView(new MappingJacksonJsonView())一个ModelAndView对象。

更新:在Spring 4 MappingJacksonJsonView是deprecated。你可能想升级到MappingJackson2JsonView

+7

详细说明,您可以将MOdelAndView的视图名称设置为MappingJacksonJsonView的一个实例返回一个JSON对象来代替ModelAndView。一个例子看起来像: 'ModelAndView mav = new ModelAndView(new MappingJacksonJsonView()); mav.addObject(“key1”,“value1”); mav.addObject(“key2”,“value2”);' 返回'mav'然后会输出一个形式如下的JSON对象: '{“key1”:“value1”,“key2”:“value2”} ' – JCoster22 2014-02-20 18:43:15

+1

更新:我使用了[MappingJackson2JsonView](http://docs.spring.io/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/view/json/MappingJackson2JsonView.html)以上。 – JCoster22 2014-02-20 18:50:16