我刚刚发现org.jboss.resteasy.client.ClientRequest
已被弃用,这使我在Google上找到的有关如何使用RESTEasy
客户端的所有信息无效。 Javadoc没有说明使用什么。谷歌也是沉默的。
我现在已经恢复到2.3.5
,但无论如何都会对答案感兴趣,以及如何在不问别人知道的情况下如何找到答案 - 是否有资源提供该信息我可以看到哪里?
答案 0 :(得分:14)
3.0 beta文档here描述了这些弃用:
Resteasy手动客户端API,拦截器,StringConverters, StringParamterConverters和Async HTTP API都已被弃用 并将在以后的版本中删除。现在有一个JAX-RS 每件事都相当于2.0。
这意味着首选方法是使用this post
中描述的JAX-RS客户端API答案 1 :(得分:6)
如果我们假设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);
}
}
}
(这也得到了this post的帮助,尽管它使用了弃用的API)。
另请注意,如果您想使用Jackson阅读POJO(或者,我认为,使用JAXB),您可能需要注册一个特殊的处理程序,如文档here
<强>更新强> 实际上,您只需要以下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>
(在这种情况下,您根本不使用RestEasy - javax.ws.rs
JAXRS实现来自泽西岛)
OR 你可以坚持使用JBoss:
<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>
在这种情况下,你可以删除上面代码中的JacksonFeature行,代码使用更自由的Apache许可证。
答案 2 :(得分:1)
RESTEasy documentation说我们应该关闭客户端连接;在您的示例中为client.close()
。但我能找到的每个例子都没有这样做。垃圾收集期间客户端连接是否会自动关闭?