首页 文章

从jersey-client-1.9升级到jersey-client-2.8

提问于
浏览
4

我正在使用 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 实现这一目标?

Edit:

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);

这工作...... :)

1 回答

  • 10

    使用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);
    

    See Also:


    更新

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

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.8</version>
    </dependency>
    

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

    client.register(JacksonFeature.class);
    

相关问题