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

Dav*_*rks 8 java spring-mvc

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

这些网址将全部驻留在网站下/services并由网站生成MyRestServicesController.

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

我只想让我的人RestServicesController永远生产MappingJacksonJsonView(s).

是否有一种更简洁,更直接的方法来直接控制器执行此操作?

Joh*_*erg 12

是否有一种更简洁,更直接的方法来直接控制器执行此操作?

就在这里.您可以查看我在Spring论坛中发布的这个示例.总之,我喜欢这样做的方式是通过以下方式.

ApplicationContext的:

<!-- json view, capable of converting any POJO to json format -->
<bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>
Run Code Online (Sandbox Code Playgroud)

调节器

@RequestMapping("/service")
public ModelAndView getResultAsJson() {
    Object jsonObj = // the java object which we want to convert to json
    return new ModelAndView("jsonView", "result", jsonObj);
}
Run Code Online (Sandbox Code Playgroud)

编辑2013:在这些现代,@ skaffman的方法将是一个不错的选择.


ska*_*man 9

如果您只需要输出JSON,那么视图层本身就是多余的.您可以使用@ResponseBody注释指示Spring使用Jackson直接序列化您的模型.它需要的配置少于MappingJacksonJsonView方法,并且代码不那么混乱.

  • @ResponseBody有一个缺点,在控制器返回后,立即呈现视图,这会关闭HttpResponse,因此无法添加标头(例如通过Interceptor的postHandle方法).使用ContentNegotiatedViewResolver没有此问题. (2认同)