spring4 vs Jersey REST Web服务


问题内容

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

如果我不使用JAX-RS和Jersey而不使用Spring REST支持,则确实使我感到困惑。

  1. 在Spring MVC中如何进行封送和拆封?

  2. 封送是否需要使用jax-rs进行封送?

  3. 如果在spring之前自动处理了编组和拆组,那么它如何知道xmlRootElements。

如果Spring证明对REST很好的支持,我仍然感到困惑,那为什么人们仍然选择Jersey来支持REST?真正希望了解更多详细信息。

如果我说错什么,请忽略它。举例说明确实很有帮助。

提前致谢!!


问题答案:

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

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

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

  2. 不,没有必要使用JAX-RS来(取消)编组资源。实际上,JAX-RS实现和Spring MVC使用第三方序列化库来完成这项工作。因此它不受特定标准的约束。

  3. 在其4.0.6版本中,Spring支持许多HttpMessageConverters,其中Jackson用于JSON,JAXB用于XML等。Spring 4.1.0添加了更多的HttpMessageConverters

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

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

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