Spring MVC - 强制控制器生成MappingJacksonJsonView(s)

时间:2011-03-21 07:56:01

标签: java spring-mvc

这里我们有一个使用JSP的基本webapp,它需要提供一些基于JSON的REST服务URL。

这些网址都位于/services下,由MyRestServicesController生成。

我看到的用于设置基于JSON的视图的示例都使用ContentNegotiatingViewResolver。但这对我来说似乎有些过分,因为这个解析器似乎意味着相同的URL可能产生不同的输出。

我只希望我的RestServicesController始终生成MappingJacksonJsonView(s)

是否有一种更干净,更直接的方法来简单地指示控制器执行此操作?

3 个答案:

答案 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