春季 4 vs 泽西岛用于 REST Web 服务

2022-08-31 09:02:22

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

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

  1. 如何在春季MVC中完成封送和取消封送?

  2. 是否需要封送处理或取消封送需要使用 jax-rs。

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

我仍然感到困惑,如果Spring证明了对REST的非常好的支持,那么为什么人们仍然选择泽西岛进行REST?真的很想了解更多细节。

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

提前致谢!!


答案 1

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

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

  1. Spring MVC不使用MessageBodyReaders/Writers来处理(取消)编组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

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

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

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


答案 2

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

我推荐泽西岛作为其成熟,实现JAX-RS并且易于使用。