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

发布于 2024-10-24 20:50:41 字数 402 浏览 1 评论 0原文

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

这些 URL 将全部驻留在 /services 下,并由 MyRestServicesController 生成。

我看到的设置基于 JSON 的视图的示例都使用 ContentNegotiatingViewResolver。但对我来说这似乎有点矫枉过正,因为这个解析器似乎适用于相同 URL 可能产生不同输出的情况。

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

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

Here we have a basic webapp using JSP which needs to provide a few JSON based REST service URLs.

These urls will all reside under /services and be generated by a MyRestServicesController.

The examples I see for settings up JSON based views all use ContentNegotiatingViewResolver. But it seems like overkill to me as this resolver seems meant for situations where the same URL might produce different output.

I just want my one RestServicesController to always produce MappingJacksonJsonView(s).

Is there a cleaner, more straight forward way to simply direct the controller to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

记忆消瘦 2024-10-31 20:50:41

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

是的,有。您可以查看我在 Spring 论坛 中发布的示例。简而言之,我更喜欢通过以下方式做到这一点。

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 的方法将是一个不错的选择。

Is there a cleaner, more straight forward way to simply direct the controller to do this?

Yes there is. You can have a look at this sample I posted in Spring forums. In short the way I prefer to do it is through the following.

ApplicationContext:

<!-- json view, capable of converting any POJO to json format -->
<bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>

Controller

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

EDIT 2013: In these modern days, @skaffman's approach would be a nice alternative.

a√萤火虫的光℡ 2024-10-31 20:50:41

如果你需要做的只是输出 JSON,那么视图层本身就是多余的。您可以使用@ ResponseBody 注释 指示 Spring 使用 Jackson 直接序列化您的模型。与 MappingJacksonJsonView 方法相比,它需要的配置更少,并且代码也更简洁。

If all you need to do is output JSON, then the view layer itself is redundant. You can use the @ResponseBody annotation to instruct Spring to serialize your model directly, using Jackson. It requires less configuration than the MappingJacksonJsonView approach, and the code is less cluttered.

烧了回忆取暖 2024-10-31 20:50:41

只要您使用 mvc:annotation-driven 并且 Jackson 位于类路径上,那么您需要做的就是在您的方法上使用 @ResponseBody,返回类型将按照 Spring 的标准 HTTP消息转换 功能。

另请观看 37:00 左右的视频:掌握 Spring MVC

As long as you are using mvc:annotation-driven and Jackson is on the classpath then all you should need to do is use @ResponseBody on on your methods and the return type will be converted to JSON per Spring's standard HTTP Message Conversion functionality.

Also check out this video at around 37:00: Mastering Spring MVC.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文