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

我刚刚发现org.jboss.resteasy.client.ClientRequest已被弃用,这使我在Google上找到的有关如何使用RESTEasy客户端的所有内容无效。 Javadoc没有说明使用什么。 谷歌也是沉默的。

我现在已经恢复到2.3.5 ,但无论如何都会对答案感兴趣,以及如何在不问别人知道的情况下如何找到答案 – 是否有资源提供我可以看到的信息?

这里的3.0 beta文档描述了这些弃用,如下所示:

Resteasy手动客户端API,拦截器,StringConverters,StringParamterConverters和Async HTTP API都已被弃用,可能会在以后的版本中删除。 现在有一个JAX-RS 2.0等同于这些东西。

这意味着首选方法是使用本文中描述的JAX-RS客户端API

如果我们假设在http://example.org/pizza/{id}.json有一个JSON API,(其中’id’是披萨ID),它会返回诸如

 { "name": "Hawaiian", "toppings": ["tomato", "ham", "cheese", "pineapple"] } 

Invocation.Builder Javadocs的基础上 ,我们可以做这样的事情,

 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依赖项:

   org.glassfish.jersey.core jersey-client 2.3.1   org.glassfish.jersey.media jersey-media-json-jackson 2.3.1  

(在这种情况下,您根本不使用RestEasy – javax.ws.rs JAXRS实现来自Jersey)

或者你可以坚持使用JBoss:

   org.jboss.resteasy resteasy-jackson2-provider 3.0.4.Final   org.jboss.resteasy resteasy-client 3.0.4.Final  

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

RESTEasy文档说我们应该关闭客户端连接; 在你的例子中将是client.close() 。 但我能找到的每一个例子都没有这样做。 在垃圾回收期间,客户端连接是否会自动关闭?