Spring 4 vs Jersey 用于 REST Web 服务

Posted

技术标签:

【中文标题】Spring 4 vs Jersey 用于 REST Web 服务【英文标题】:Spring 4 vs Jersey for REST web services 【发布时间】:2014-12-05 23:22:39 【问题描述】:

我们计划用 spring 4.0.6 版本制作一个新的应用程序。我们使用可以返回“XML”或“JSON”的控制器。 在之前的项目中,我们已经使用 JAX-RS API 成功实现了带有 Spring 的 Jersey 来支持 REST,但是在阅读了一些前辈的文章和建议后,他们说 Spring 提供了非常好的 REST 支持。

如果我在不使用 JAX-RS 和 Jersey 的情况下使用 Spring REST 支持,我真正感到困惑的一些要点是:

    在 Spring MVC 中如何进行编组和解组?

    是否需要使用 jax-rs 进行编组或解组。

    如果编组和取消编组由 spring 自动处理,那么它如何知道 xmlRootElements。

如果 Spring 证明对 REST 的支持非常好,我仍然感到困惑,那么为什么人们仍然选择 Jersey 来支持 REST? 真的很想知道更多细节。

如果我说错了,请忽略它。 举例说明真的很有帮助。

提前致谢!!

【问题讨论】:

【参考方案1】:

我想说 Jersey 和 Spring MVC 都很棒 - 每个项目都有自己的风格和优势。无论如何,Stack Overflow 不适合进行主观比较(您的问题很快就会结束)。如果您已经在使用 Spring 进行其他所有操作并且不需要使用 JAX-RS,那么 Spring MVC 完全有意义。

关于(非)编组等功能,JAX-RS 毕竟只是一个规范 - 其他库可以提供类似的功能而无需实现相同的 API。

    Spring MVC 使用 HttpMessageConverters 来处理(取消)编组 REST 资源,而不是 MessageBodyReaders/Writers。 Spring MVC 处理内容协商并为作业选择最佳可用转换器(您可以注释方法以提示它们生成/使用的媒体类型)。

    不,没有必要使用 JAX-RS 来(取消)编组资源。事实上,JAX-RS 实现和 Spring MVC 使用第三方序列化库来完成这项工作;所以它不依赖于特定的标准。

    在其 4.0.6 版本中,Spring 支持许多 HttpMessageConverters,其中 JSON 支持 Jackson,XML 支持 JAXB 等等。 Spring 4.1.0 增加了更多HttpMessageConverters:

    Jackson 现在可用于 JSON 和 XML Google Protobuf Gson for JSON,作为杰克逊的替代品

回答您的最后一点,@XmlRootElement 是 JAXB 注释,不是 JAX-RS 的一部分。 Spring supports JAXB.

有关 Spring 中使用 REST 的更完整示例,请查看 this getting started guide(您将在 10-15 分钟内获得完整示例)。

同样,您问题的最后一部分非常主观 - 有许多流行的解决方案可用于在 JVM 中构建 REST 服务,而不仅仅是 Jersey 和 Spring(Dropwizard、Play!框架等)。

【讨论】:

你会建议人们在哪里问这样的问题? “你的问题很快就会结束”!没那么快:) 我喜欢 ***,我喜欢 quora,我从不喜欢这种结束主观问题的政策,我从没想过在 quora 中提出技术问题 一个切题的问题,我们可以在同一个 EAR 中同时拥有 Jersey 和 SpringRest,同时为不同的服务集运行吗? @pramodc84 : 如果 EAR 有多个 .WAR 文件,那么是的,第一次战争可以有球衣,第二次战争可以使用 Srping MVC,第三次战争可以使用 DropWizard 等【参考方案2】:

AFAIK Spring REST 支持基于 Spring MVC 而非 JAX-RS 实现,而 Jersey 已实现 JAX-RS 规范。 那些在他们的项目中使用 Spring(Core、AOP 或 MVC)的人选择 Spring ReST 支持而不是 JAX-RS 实现者。

我推荐 Jersey,因为它成熟,实现了 JAX-RS 并且易于使用。

【讨论】:

感谢您的回复,春季如何在不使用 jax-rs 的情况下进行编组和解组。 是的,我同意你的看法。 Spring Web MVC Rest 并不是那么容易使用。您需要注意许多配置。 如果你使用(或者你想使用)Spring boot,Jersey 也是一个不错的选择。 cfdocumentation 您可以使用Google GSON 库进行编组和解组。它支持 Java 泛型和自定义对象。

以上是关于Spring 4 vs Jersey 用于 REST Web 服务的主要内容,如果未能解决你的问题,请参考以下文章

列出所有已部署的 REST 端点(spring-boot、jersey)

使用jersey客户端消耗spring REST api

JAX-RS(基于Jersey) + Spring 4.x + MyBatis构建REST服务架构

使用 Spring Security 3.2.4 for Jersey 2.9 REST 服务的全局方法安全性的正确配置是啥?

Jersey Jackson和codehaus vs. fasterxml

分布式系统REST风格架构常用技术:Jersey,ApacheCXF,Spring MVC