Spring MVC - 强制控制器生成 MappingJacksonJsonView(s)
这里我们有一个使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是的,有。您可以查看我在 Spring 论坛 中发布的示例。简而言之,我更喜欢通过以下方式做到这一点。
ApplicationContext:
控制器
编辑2013:在当今时代,@skaffman 的方法将是一个不错的选择。
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:
Controller
EDIT 2013: In these modern days, @skaffman's approach would be a nice alternative.
如果你需要做的只是输出 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 theMappingJacksonJsonView
approach, and the code is less cluttered.只要您使用 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.