Jeśli założymy, że jest JSON API w http://example.org/pizza/{id}.json
(gdzie „id” jest ID pizzy), która zwraca wyniki, takie jak
{
"name": "Hawaiian",
"toppings": ["tomato", "ham", "cheese", "pineapple"]
}
budynek na Invocation.Builder
Javadocs, możemy zrobić coś takiego,
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);
}
}
}
(jest to również wspierane przez this post, mimo że korzysta z wycofanego API).
Należy również zauważyć, że być może trzeba zarejestrować specjalnej obsługi, jeśli chcesz korzystać z Jackson do zapoznania POJOs (lub, jak sądzę, za pomocą JAXB) jako udokumentowaną here
Aktualizacja rzeczywiście tylko potrzebne są następujące Maven zależności:
<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>
(w takim przypadku nie jesteś w ogóle - z wykorzystaniem RestEasy javax.ws.rs
JAXRS realizacja pochodzi z Jersey)
LUB można trzymać z 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>
W takim przypadku można po prostu usunąć wiersz JacksonFeature w powyższym kodzie, a kod wykorzystuje bardziej liberalnej licencji Apache.
Istnieje również kilka przydatnych informacji [pochowanych w Javadocs dla 'Invocation.Builder'] (http://docs.jboss.org/resteasy/docs/3.0.4.Final/javadocs/javax/ws/rs/ client/Invocation.Builder.html), który nie odwołuje się do nieistniejącej klasy 'ClientFactory', ale byłoby wspaniale, gdyby autorzy RestEasy dodali kilka wskaźników z wycofanych klas. –