5

我正在使用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.clientorg.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);

这有效... :)

4

1 回答 1

13

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

Client client = ClientBuilder.newClient();

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

WebTarget target = client.target(url); 

然后你需要调用request()WebTarget获取一个Invocation.Builder,这将允许你链接其他调用

Invocation.Builder invocation = target.request();

要发送实体,我们需要将一个传递EntityInvocation.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);
于 2015-08-17T05:26:38.450 回答