用什么代替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()
。 但我能找到的每一个例子都没有这样做。 在垃圾回收期间,客户端连接是否会自动关闭?