Se assumiamo c'è un API JSON a http://example.org/pizza/{id}.json
, (dove 'id' è un ID di pizza), che restituisce i risultati, come
{
"name": "Hawaiian",
"toppings": ["tomato", "ham", "cheese", "pineapple"]
}
Basandosi sul Invocation.Builder
Javadocs, siamo in grado di fare qualcosa di simile,
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);
}
}
}
(anche questo è supportato da this post sebbene utilizzi l'API obsoleta).
Si noti inoltre che potrebbe essere necessario registrare un gestore speciale se si desidera utilizzare Jackson per leggere POJO (o, credo, utilizzando JAXB) come documentato here
Aggiornamento È in realtà solo bisogno di quanto segue dipendenze 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>
(nel qual caso non si sta usando RESTEasy a tutti - le javax.ws.rs
jaxrs implementazione proviene da Jersey)
O si può attaccare con 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>
In questo caso si può semplicemente rimuovere la riga JacksonFeature nel codice sopra riportato, e il codice utilizza la licenza più liberale Apache.
C'è anche qualche informazione utile [sepolto nel Javadocs per 'Invocation.Builder'] (http://docs.jboss.org/resteasy/docs/3.0.4.Final/javadocs/javax/ws/rs/ client/Invocation.Builder.html) che non si riferisce a una classe 'ClientFactory' inesistente, ma sarebbe bello se gli autori di RestEasy aggiungessero alcuni puntatori alle classi deprecate. –