2011-05-30 59 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