春季4与泽西(REST Web Services)


117

我们计划用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. 如果在春季之前自动处理了编组和拆组,那么它将如何知道xmlRootElements。

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

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

提前致谢!!

Answers:


119

我要说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等)。


2
您会在哪里建议有人问这样的问题?
swade 2016年

8
“您的问题很快就会结束”!没那么快:)
Afshin Moazami '16

6
我喜欢stackoverflow,也喜欢quora,我从不喜欢这种封闭的主观问题政策,我也从未想过要在quora中提出技术问题
Kalpesh Soni

一个切线问题:我们是否可以在同一个EAR中同时使用Jersey和SpringRest,它们一起为不同的服务集运行?
pramodc84

22

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

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


1
感谢您的答复,春季如何在不使用jax-rs的情况下进行编组和拆组。
罗宾·萨克塞纳

是的,我同意你的看法。Spring Web MVC Rest不是那么容易使用。您需要注意许多配置。
Evan Hu

2
如果您使用(或想要使用)Spring Boot,Jersey也是一个不错的选择。cf 文档
herau 2015年

1
您可以使用Google GSON库进行封送和拆封。它支持Java泛型和自定义对象。
Tejzeratul
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.