我剛剛發現org.jboss.resteasy.client.ClientRequest
已被棄用,我無法在Google上找到有關如何使用RESTEasy
客戶端的所有信息。 Javadoc沒有提供什麼使用指示。谷歌同樣沉默。使用什麼來代替org.jboss.resteasy.client.ClientRequest?
現在我已經恢復到2.3.5
,但是無論如何,我會對答案感興趣,以及如何找到答案,而不要問問知道的其他人 - 是否有資源提供這些信息看過?
我剛剛發現org.jboss.resteasy.client.ClientRequest
已被棄用,我無法在Google上找到有關如何使用RESTEasy
客戶端的所有信息。 Javadoc沒有提供什麼使用指示。谷歌同樣沉默。使用什麼來代替org.jboss.resteasy.client.ClientRequest?
現在我已經恢復到2.3.5
,但是無論如何,我會對答案感興趣,以及如何找到答案,而不要問問知道的其他人 - 是否有資源提供這些信息看過?
描述的JAX-RS客戶端API如果我們假設有一個JSON API在http://example.org/pizza/{id}.json
,(其中,「ID」是比薩餅ID ),它返回的結果Invocation.Builder
Javadocs如
{
"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);
}
}
}
(這也得到this post的幫助,儘管它使用了棄用的API)。
還請注意,您可能需要註冊一個特殊的處理,如果你想用傑克遜閱讀的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許可證。
RESTEasy documentation表示我們應該關閉客戶端連接;在你的例子中這將是client.close()
。但是我能找到的每個例子都不會這樣做。垃圾收集期間,客戶端連接是否會自動關閉?
還有一些有用的信息[埋入在Invocation.Builder的Javadoc中](http://docs.jboss.org/resteasy/docs/3.0.4.Final/javadocs/javax/ws/rs/ client/Invocation.Builder.html),它不涉及不存在的'ClientFactory'類,但如果RestEasy作者添加了一些來自已棄用類的指針,那將會很好。 –