2013-01-22 32 views
26

Tôi chỉ thấy rằng org.jboss.resteasy.client.ClientRequest không được dùng nữa, làm mất hiệu lực mọi thứ tôi có thể tìm thấy trên Google về cách sử dụng ứng dụng khách RESTEasy. Các Javadoc cho không có dấu hiệu như những gì để sử dụng để thay thế. Google cũng tương tự như vậy.Những gì để sử dụng thay vì org.jboss.resteasy.client.ClientRequest?

Tôi đã hoàn nguyên về số 2.3.5 hiện tại, nhưng cũng quan tâm đến câu trả lời, cũng như cách người ta phải tìm ra câu trả lời mà không hỏi người khác biết - có tài nguyên với thông tin đó đã xem ?

Trả lời

13

Các tài liệu 3.0 beta here mô tả những deprecations như vậy:

Resteasy tay khách hàng API, máy bay đánh chặn, StringConverters, StringParamterConverters, và API HTTP Async đều bị phản đối và sẽ được gỡ bỏ có thể trong một sau giải phóng. Hiện tại có một tương đương JAX-RS 2.0 cho mỗi thứ này.

Điều này có nghĩa rằng các phương pháp ưa thích sẽ được sử dụng các ứng dụng khách API JAX-RS được mô tả trong this post

+3

Ngoài ra còn có một số thông tin hữu ích [được chôn trong Javadocs cho 'Invocation.Builder'] (http://docs.jboss.org/resteasy/docs/3.0.4.Final/javadocs/javax/ws/rs/ client/Invocation.Builder.html) không tham chiếu đến một lớp 'ClientFactory' không tồn tại, nhưng nó sẽ là tuyệt vời nếu các tác giả RestEasy thêm một số con trỏ từ các lớp không được chấp nhận. –

5

Nếu chúng ta giả sử có một API JSON tại http://example.org/pizza/{id}.json, (nơi 'id' là một ID bánh pizza) trả về kết quả như

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

xây dựng trên Invocation.Builder Javadocs, chúng ta có thể làm điều gì đó như thế này,

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); 
     } 
    } 
} 

(điều này cũng được hỗ trợ bởi this post mặc dù sử dụng API không dùng nữa).

cũng

Lưu ý rằng bạn có thể cần phải đăng ký một handler đặc biệt nếu bạn muốn sử dụng Jackson để đọc POJO (hoặc, tôi nghĩ rằng, sử dụng JAXB) như tài liệu here

Cập nhật Bạn thực sự chỉ cần những điều sau đây phụ thuộc 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> 

(Trong trường hợp mà bạn không sử dụng RestEasy ở tất cả - các javax.ws.rs JAXRS thực hiện xuất phát từ Jersey)

HOẶC bạn có thể gắn bó với 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> 

Trong trường hợp này bạn chỉ có thể loại bỏ các dòng JacksonFeature trong đoạn code trên, và mã sử dụng giấy phép Apache tự do hơn.

1

RESTEasy documentation nói rằng chúng ta nên đóng kết nối khách hàng; có thể là client.close() trong ví dụ của bạn. Nhưng mỗi ví dụ tôi có thể tìm thấy không làm điều này. Kết nối máy khách sẽ tự động đóng trong khi thu gom rác?

Các vấn đề liên quan