我们计划用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 .
-
如果 spring 自动处理编组和解编,那么它如何知道xmlRootElements .
我仍然感到困惑,如果Spring证明了REST的非常好的支持那么为什么人们仍然会使用Jersey进行REST?真的希望了解更多细节 .
如果我说错了,请忽略它 . 对示例的解释非常有用 .
提前致谢!!
2 回答
我已经将Spring用于其他所有事情并且不需要使用JAX-RS,那么Spring MVC完全有道理 .
关于(un)编组等功能,JAX-RS毕竟只是一个规范 - 其他库可以提供类似的功能而无需实现相同的API .
而不是MessageBodyReaders / Writers,Spring MVC使用HttpMessageConverters来处理(联合)编组REST资源 . 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等) .
AFAIK Spring REST支持基于Spring MVC而不是JAX-RS实现,而Jersey实现了JAX-RS规范 . 那些在他们的项目中使用Spring(Core,AOP或MVC)的人选择Spring ReST支持而不是JAX-RS实现者 .
我推荐Jersey成熟,实现JAX-RS并且易于使用 .