Spring 4与Jersey for REST Web服务

我们正计划用Spring 4.0.6版本做一个新的应用程序。 我们使用可以返回“XML”或“JSON”的控制器。 在之前的项目中,我们已经成功地使用JAX-RS API实现了Jersey与Spring的REST支持,但是在阅读了一些老年人的文章和build议之后,他们说Spring提供了相当不错的REST支持。

如果我在不使用JAX-RS和Jersey的情况下使用Spring REST支持,那么真的让我困惑的一些观点是:

  1. Spring MVC如何编组和解组?

  2. 是否需要封送或解组需要使用jax-rs。

  3. 如果封送处理和解组处理是由spring自动处理的,那么它是如何知道xmlRootElements的。

如果Springcertificate了REST的很好的支持,那么我仍然感到困惑,那么为什么人们仍然会使用Jersey来进行REST? 真的想知道更多的细节。

如果我说错了,请忽略它。 用例子解释真的很有帮助。

提前致谢!!

我认为Jersey和Spring MVC都很棒 – 每个项目都有自己的风格和优势。 无论如何,堆栈溢出不是问主观比较的正确的地方(你的问题会很快closures)。 如果你已经在使用Spring,并且不需要使用JAX-RS,那么Spring MVC是非常有意义的。

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

  1. Spring MVC不是使用MessageBodyReaders / Writers,而是使用HttpMessageConverters处理( 解除 )编组REST资源。 Spring MVC处理内容协商并为作业select最佳的可用转换器(您可以注释方法来暗示它们生成/消耗的媒体types)。

  2. 不,不需要使用JAX-RS(un)marshall资源。 事实上,JAX-RS实现和Spring MVC使用第三方序列化库来完成这项工作; 所以它不是绑定到一个特定的标准。

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

    • Jackson现在可用于JSON和XML
    • Google Protobuf
    • Gson为JSON ,作为Jackson的替代品

为了回答您的最后一点, @XmlRootElement是JAXB注释,不是JAX-RS的一部分。 Spring支持JAXB 。

有关Spring中REST的更完整示例,请查看本入门指南 (您将在10-15分钟内获得一个完整的示例)。

问题的最后一部分是相当主观的 – 有许多stream行的解决scheme在JVM中构buildREST服务,而不仅仅是Jersey和Spring(Dropwizard,Play!Framework等)。

AFAIK Spring的REST支持基于Spring MVC,而不是JAX-RS实现,而Jersey则实现了JAX-RS规范。 那些在他们的项目中有Spring(Core,AOP或者MVC)的人通过JAX-RS实现者select了Spring ReST支持。

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