【问题标题】:Upgrading from Jersey Client 1.x to Jersey Client 2.x从 Jersey Client 1.x 升级到 Jersey Client 2.x
【发布时间】:2015-08-17 04:45:13
【问题描述】:

我正在使用jersey-client-1.9。示例代码:

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;

Client client = Client.create();
webResource = client.resource("http://localhost:8047/storage/hive.json");
String input = //rest request
ClientResponse response = webResource.type("application/json").post(ClientResponse.class, input);
String queryRespose = response.getEntity(String.class);

由于此项目已从 com.sun.jersey.api.client 更改为 org.glassfish.jersey.client。如何在jersey-client-2.8 中实现这一点?

编辑:

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;

Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:8047/query.json");
String input =//rest request
Response response = target.request().post(Entity.json(input));
String queryRespose = response.readEntity(String.class);

这行得通...:)

【问题讨论】:

  • 我不知道为什么异常消息中有任何与com.sun.jersey 相关的内容。如果您要使用 Jersey 2.x (org.glassfish.jersey),则需要删除任何与 Jersey 1.x (com.sun.jersey) 相关的东西
  • @peeskillet 我的错。我的项目中有 1.9 和 2.8 罐子。我删除了 1.9。现在一切正常...谢谢..

标签: java jersey jersey-2.0 jersey-client jersey-1.0


【解决方案1】:

使用 Jersey 2.x,您可以使用 ClientBuilder 构建 Client

Client client = ClientBuilder.newClient();

在 Jersey 2.x 中,WebTarget 类似于 Jersey 1.x WebResource,而不是调用 client.resource() 来获取 WebResource,而是调用 client.target() 来获取 WebTarget

WebTarget target = client.target(url); 

然后您需要在WebTarget 上调用request() 以获取Invocation.Builder,这将允许您链接其他调用

Invocation.Builder invocation = target.request();

要发送实体,我们需要将Entity 传递给Invocation.Builder 的请求方法之一。比如

Response response = builder.post(Entity.json(input);

要阅读回复,请使用response.readEntity(String.class)。所以总的来说,你可以做

Client client = ClientBuilder.newClient();
WebTarget target = client.target(url);
Response response = target.request().post(Entity.json(input));
String entity = response.readEntity(String.class);

另请参阅:


更新

您可能还需要以下依赖项来支持 JSON/POJO

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>${jersey.version}</version>
</dependency>

然后向客户端注册JacksonFeature。这样input(如果你想使用 POJO 而不是 String)可以序列化为 JSON

client.register(JacksonFeature.class);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 2021-03-03
    • 1970-01-01
    • 2018-04-07
    • 2023-03-11
    • 2018-12-21
    • 1970-01-01
    • 2014-06-02
    相关资源
    最近更新 更多