什么是 JAX-RS 实现?

Posted

技术标签:

【中文标题】什么是 JAX-RS 实现?【英文标题】:What's a JAX-RS implementation? 【发布时间】:2011-06-27 17:01:04 【问题描述】:

很长一段时间以来,我一直试图弄清楚如何使用 JAX-RS。我从非常基本的概念开始,然后逐渐理解了注解式编程,@Path、@Get、@Post等的含义。

据我了解,至于很多地方都提到过,JAX-RS 是一个专注于将 Java 注释应用于普通 Java 对象的框架(第 27 页,Bill Burke,RESTful Java)。

然后,我对此感到困惑。如果 JAX-RS 本身是一个定义处理注解的 API 以实现 RESTful Web 服务的框架,那么“Jersey”和“JBoos Resteasy”等“JAX-RS 的实现”是什么意思。 JAX-RS 之上的另一层?为什么我们需要它们?

有人可以提供一些关于它的见解吗?非常感谢!!!

【问题讨论】:

另见***.com/tags/jax-rs/info 【参考方案1】:

JAX-RS 是使用 Java 的 RESTful Web 服务规范。 Java EE 中包含一个参考实现,但由于它是一个规范,因此可以编写其他框架来实现该规范,包括 Jersey、Resteasy 等。

【讨论】:

是的,完全正确!我知道它们是实现,但我无法理解“作为 JAX-RS 的实现”的含义。看,我创建了一个简单的 rest 类并导入了命名空间,例如“javax.ws.rs.GET”、“javax.ws.rs.Path”、“javax.ws.rs.Produces”;“javax.ws.rs .core.MediaType”。然后我使用 Tomcat 服务器部署了这个类,并将所有球衣 jar 放入 lib 并运行它。球衣在哪里用过??四个导入的命名空间是否属于 jersey?我用 Resteasy 方法创建了另一个应用程序,其中仍然使用了四个导入。我很困惑...... Jersey 实际上是在实现 javax.ws.rs.* 类。如果不使用某些实现,您所拥有的只是接口类,它们不能自己做任何事情。 JAX-RS 的所有实现都使用相同的接口。 谢谢!!当我睡觉并思考我创建的几个小项目时,我实际上意识到了这一点! Jersey 实际上是参考实现!来自主页:“Jersey RESTful Web 服务框架是开源的、生产质量的、用于在 Java 中开发 RESTful Web 服务的框架,它提供对 JAX-RS API 的支持并用作 JAX-RS(JSR 311 和 JSR 339)参考实现。 " @RayHulha 我发现这很有趣,我只是在查看人们对各种实现的想法时发现了这个问题,并打算指出泽西岛是参考......只是发现有人在最后24小时。关于一个 4.5 岁的问题。【参考方案2】:

JAX-RS 是 Java 规范请求 311 (JSR-311) 中定义的标准,Jersey / RESTEasy 是它的实现。

作为实现意味着规范说“如果您将 @GET("/foo") 放在方法 (bar()) 上,您可以访问数据 X” - 现在在应用服务器中,需要有人进入并实际阅读您部署的代码,使用@GET 注释解析字节码,然后如果用户实际浏览到例如http://localhost/foo 获取此 Web 请求以到达 bar() 并将 bar() 的返回值转换为 http 应答(例如,以 XML 或 JSON 表示形式)。

所以名为“JAX-RS”的规范只提供了例如的语法和语义。 @GET,但是解析请求、调用正确的方法、编组结果值等工作需要由实现规范的包来完成。

标准 2.0 版的工作已经开始,名称为 JRS-339。

另见http://en.wikipedia.org/wiki/Jax-rs

【讨论】:

非常感谢!!我知道它们是实现,但我无法理解“作为 JAX-RS 的实现”的含义。我在另一篇文章中添加了一些关于我的问题的进一步说明,请您看一下吗? 知道了!!在另一篇文章中,Mike 还提到如果没有所有这些实现,JAX-RS 只是一个接口板。谢谢!

以上是关于什么是 JAX-RS 实现?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Rest 是 JAX-RS 的实现还是 Spring Rest 使用啥实现来支持 REST?

在用于 OSGi 的 JAX-RS 白板的参考实现中,啥调用 createWhiteboard(..)?

如何在 JAX-RS 和 JAX-WS Web 服务实现之间进行选择?

测试 JAX-RS Web 服务?

JAX-RS 和 JAX-WS 有啥区别?

带有安全过滤器和依赖注入的 jax-rs 1.1,如何实现这一点?