这里我们有一个使用JSP的基本webapp,它需要提供一些基于JSON的REST服务URL。
这些网址都位于/services
下,由MyRestServicesController
生成。
我看到的用于设置基于JSON的视图的示例都使用ContentNegotiatingViewResolver
。但这对我来说似乎有些过分,因为这个解析器似乎意味着相同的URL可能产生不同的输出。
我只希望我的RestServicesController
始终生成MappingJacksonJsonView(s)
。
是否有一种更干净,更直接的方法来简单地指示控制器执行此操作?
答案 0 :(得分:12)
是否有一种更干净,更直接的方法来简单地指示控制器执行此操作?
是的。您可以查看我在Spring forums中发布的此示例。总之,我喜欢这样做的方式是通过以下方式。
的ApplicationContext:
<!-- json view, capable of converting any POJO to json format -->
<bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>
控制器
@RequestMapping("/service")
public ModelAndView getResultAsJson() {
Object jsonObj = // the java object which we want to convert to json
return new ModelAndView("jsonView", "result", jsonObj);
}
编辑2013:在这些现代,@ skaffman的方法将是一个不错的选择。
答案 1 :(得分:9)
如果您只需要输出JSON,那么视图层本身就是多余的。您可以use the @ResponseBody
annotation指示Spring使用Jackson直接序列化您的模型。它需要的配置少于MappingJacksonJsonView
方法,并且代码不那么混乱。
答案 2 :(得分:3)
只要您使用mvc:annotation-driven并且Jackson在类路径上,那么您需要做的就是在方法上使用@ResponseBody,并且返回类型将按照Spring的标准转换为JSON {{3功能。
请在37:00左右查看此视频:HTTP Message Conversion。