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.
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. –