Spring 4 vs Jersey用于REST Web服务

问题

我们计划用spring 4.0.6版本创建一个新的应用程序。我们使用可以返回"XML"或"JSON"的控制器。在之前的项目中,我们使用JAX-RS API成功实现了Jersey with Spring for REST支持,但在阅读了一些文章和老年人的建议后,他们说Spring提供了非常好的REST支持。

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

  • 如何在Spring MVC中完成编组和解组?
  • 编组或解组是否需要使用jax-rs。
  • 如果弹簧自动处理编组和解编,那么它如何知道xmlRootElements。

我仍然感到困惑,如果Spring证明了对REST的非常好的支持那么为什么人们仍然会使用Jersey进行REST?真的希望了解更多细节。

如果我说错了,请忽略它。对示例的解释非常有用。

提前致谢!!


#1 热门回答(110 赞)

我会说Jersey和Spring MVC都很棒 - 每个项目都有自己的风格和优势。无论如何,Stack Overflow不适合进行主观比较(你的问题很快就会被关闭)。如果你已经将Spring用于其他一切并且不需要使用JAX-RS,那么Spring MVC就是完全有道理的。

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

  • Spring MVC使用HttpMessageConverters来处理(un)编组REST资源,而不是MessageBodyReaders / Writers。 Spring MVC处理内容协商并为作业选择最佳可用转换器(你可以注释方法以暗示它们生成/使用的媒体类型)。
  • 不,没有必要使用JAX-RS来(联合国)编组资源。实际上,JAX-RS实现和Spring MVC使用第三方序列化库来完成工作;所以它不依赖于特定的标准。
  • 在其4.0.6版本中,Spring支持许多HttpMessageConverters,其中包括Jackson for JSON,JAXB for XML和许多其他版本。 Spring 4.1.0增加了更多HttpMessageConverters:Jackson现在可用于JSON和XML Google Protobuf Gson for JSON,作为Jackson的替代品

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

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

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


#2 热门回答(22 赞)

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

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