gpt4 book ai didi

java - 使用 JAX-RS 而不特定于实现

转载 作者:行者123 更新时间:2023-12-01 16:46:18 26 4
gpt4 key购买 nike

我有一个服务,我想以基本相同的方式在几个项目中使用它。我想简化向这些项目发送和接收数据的过程,因此我想制作一个客户端 jar 来处理打包和解包 jaxrs 响应/请求的过程,并将其包含在我的其他项目中。

但是,要使用任何 jax-rs 对象,我必须依赖于 jax-rs 的特定实现。在我的小客户端库中,我必须包含 jersey (或 Resteasy 或 cxf)才能访问任何 jax-rs 导入。如果我要将这个 jar 包含在我的任何其他项目中,他们也将被迫使用该其余实现。

是否有一种方法可以创建一个使用 jax-rs 对象的单个项目 jar,该项目将使用消费容器的 jax-rs 实现,而不是拥有许多几乎相同的仅包含不同 jax-rs 实现的客户端项目?

本质上,我希望我的项目 wars 包含一个 jar,它将处理打包和解包 jax-rs Rest 对象,这些对象使用 war 项目使用的任何 jax-rs 实现。

最佳答案

javax.ws.rs.* 包中的类是可移植的,并且预计可以跨不同的 JAX-RS 实现工作。使用以下依赖项:

<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.1</version>
</dependency>

以下包中的类是特定于实现的,当您希望代码可以跨不同实现移植时,您不想直接使用它们:

  • Jersey :org.glassfish.jersey.*

  • RESTEasy:org.jboss.resteasy.*

  • Apache CXF:org.apache.cxf.jaxrs.*

但是,此类类在运行时必须位于类路径中

<小时/>

JAX-RS 客户端 API 是在 JAX-RS 2.0 中引入的,并在 JAX-RS 2.1 中通过 react 功能进行了增强。查看API documentation了解详情。

在 JAX-RS 2.0 之前,任何客户端支持都是特定于供应商的并且不可移植。大多数供应商提供的基于代理的客户端也不可移植。

JAX-RS 客户端 API 的使用方式如下:

Client client = ClientBuilder.newClient();
Response response = client.target("http://example.org/hello").request("text/plain").get();

在上面的代码中,一个javax.ws.rs.client.Client将使用默认 javax.ws.rs.client.ClientBuilder 创建实例由 JAX-RS 实现提供者提供的实现类。

<小时/>

如果您有兴趣,请查看 Client 的文档实现:

关于java - 使用 JAX-RS 而不特定于实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49909529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com