Java 使用什么代替org.jboss.resteasy.client.ClientRequest?

Java 使用什么代替org.jboss.resteasy.client.ClientRequest?,java,jboss,resteasy,Java,Jboss,Resteasy,我刚刚发现,org.jboss.resteasy.client.ClientRequest已被弃用,这使得我在谷歌上找到的关于如何使用resteasy客户端的所有信息都无效。报告中没有说明应该使用什么。谷歌也同样保持沉默 现在我已经回到了2.3.5,但我对答案很感兴趣,也很想知道一个人是如何在不询问其他人的情况下找到答案的——我可以在哪里找到这些信息的资源吗?3.0测试版文档这样描述了这些不赞成意见: Resteasy手动客户端API、拦截器、StringConverter、, StringPa

我刚刚发现,
org.jboss.resteasy.client.ClientRequest
已被弃用,这使得我在谷歌上找到的关于如何使用
resteasy
客户端的所有信息都无效。报告中没有说明应该使用什么。谷歌也同样保持沉默


现在我已经回到了
2.3.5
,但我对答案很感兴趣,也很想知道一个人是如何在不询问其他人的情况下找到答案的——我可以在哪里找到这些信息的资源吗?

3.0测试版文档这样描述了这些不赞成意见:

Resteasy手动客户端API、拦截器、StringConverter、, StringParameterConverters和异步HTTP API都已被弃用 并可能在以后的版本中删除。现在有了一个JAX-RS 2.0,相当于上述各项


这意味着,如果我们假设在
http://example.org/pizza/{id}.json
,(其中'id'是比萨饼id),它返回如下结果

{ 
  "name": "Hawaiian",
  "toppings": ["tomato", "ham", "cheese", "pineapple"]
}
在这个基础上,我们可以做这样的事情

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Invocation;
import org.glassfish.jersey.jackson.JacksonFeature;

public class PizzaClient {
    private Client client;

    public PizzaClient() {
         client = ClientBuilder.newClient();
         // enable POJO mapping using Jackson - see
         // https://jersey.java.net/documentation/latest/user-guide.html#json.jackson
         client.register(JacksonFeature.class); 
    }

    /** POJO which maps to JSON results using Jackson */
    public static class Pizza {
        private String name;
        private String[] toppings;

        public String getName() { return name; }
        public String[] getToppings() { return toppings ; }
    }

    public Pizza getPizzaById(String id) {
        String uri = String.format("http://example.org/pizza/%s.json", id)
        Invocation.Builder bldr = client.target(uri).request("application/json");
        return bldr.get(Pizza.class);
    }

    public static void main(String[] args) {
       PizzaClient pc = new PizzaClient();
       Pizza pizza = pc.getPizzaById("1");
       System.out.println(pizza.getName() + ":");
       for (String topping : pizza.getToppings()) {
            System.out.println("\t" + topping);
       }
    }
}
(尽管使用了不推荐使用的API,但也有助于实现这一点)

还要注意,如果您想使用Jackson来读取pojo(或者,我认为,使用JAXB),可能需要注册一个特殊的处理程序

更新 实际上,您只需要以下Maven依赖项:

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>2.3.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.3.1</version>
    </dependency>

在这种情况下,您可以删除上面代码中的JacksonFeature行,代码使用更自由的Apache许可证。

说我们应该关闭客户端连接;在您的示例中是
client.close()
。但我能找到的每一个例子都不能做到这一点。在垃圾收集过程中客户端连接会自动关闭吗?

还有一些有用的信息,这些信息并不涉及不存在的
ClientFactory
类,但是如果RestEasy作者从不推荐的类中添加一些指针,那就太好了。我要补充你的意见……那。。。。示例很少包含import语句(
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jackson2-provider</artifactId>
        <version>3.0.4.Final</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-client</artifactId>
        <version>3.0.4.Final</version>
    </dependency>