2013-01-22 38 views
26

我剛剛發現org.jboss.resteasy.client.ClientRequest已被棄用,我無法在Google上找到有關如何使用RESTEasy客戶端的所有信息。 Javadoc沒有提供什麼使用指示。谷歌同樣沉默。使用什麼來代替org.jboss.resteasy.client.ClientRequest?

現在我已經恢復到2.3.5,但是無論如何,我會對答案感興趣,以及如何找到答案,而不要問問知道的其他人 - 是否有資源提供這些信息看過?

回答

13

3.0 Beta文檔here描述像這樣這些棄用:

RestEasy的手動客戶端API,攔截器,StringConverters, StringParamterConverters,和異步HTTP的API都被棄用 和將在以後可能去除發佈。現在每個這些東西都有一個JAX-RS 2.0等價物。

這將意味着,優選的方法將是使用在this post

+3

還有一些有用的信息[埋入在Invocation.Builder的Javadoc中](http://docs.jboss.org/resteasy/docs/3.0.4.Final/javadocs/javax/ws/rs/ client/Invocation.Builder.html),它不涉及不存在的'ClientFactory'類,但如果RestEasy作者添加了一些來自已棄用類的指針,那將會很好。 –

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許可證。

1

RESTEasy documentation表示我們應該關閉客戶端連接;在你的例子中這將是client.close()。但是我能找到的每個例子都不會這樣做。垃圾收集期間,客戶端連接是否會自動關閉?

相關問題