Come creare client REST per i servizi REST del mondo esterno
Come posso creare un client rest usando JAX-RS Client fluent API per il servizio REST del mondo esterno?
Ad esempio, supponiamo che un servizio restituisca un oggetto person con due nomi di campo ed età.
Qualunque siano gli esempi/tutorial che ho incontrato, fanno la stessa cosa di seguito snippet o sviluppano client nello stesso progetto per sostituire String.classe con persona.classe. Come dovrei creare un cliente indipendente che mi restituirà pojo di persona.
String entity = client.target("http://example.com/rest")
.path("resource/helloworld")
.queryParam("greeting", "Hi World!")
.request(MediaType.TEXT_PLAIN_TYPE)
.header("some-header", "true")
.get(String.class);
1 answers
Richiesta di un'entità e mappatura a una classe Java
Si consideri, ad esempio, che si sta consumando un'API REST che fornisce il seguente JSON quando si esegue una richiesta GET
su http://example.com/api/people/1
:
{
"name": "John Doe",
"age": 25
}
Il JSON di cui sopra può essere mappato a una classe Java, definita come segue:
public class Person {
private String name;
private Integer age;
// Constructor, getters and setters omitted
}
Utilizzando l'API client JAX-RS, il JSON può essere richiesto come segue, mappando l'entità richiesta alla classe Person
:
Client client = ClientBuilder.newClient();
Person person = client.target("http://example.com/api")
.path("people").path("1")
.request(MediaType.APPLICATION_JSON)
.get(Person.class);
String name = person.getName();
Integer age = person.getAge();
L'API client JAX-RS fa parte di JAX-RS 2.0 specifica e l'implementazione di riferimento è Jersey .
Per analizzare JSON, Jersey viene fornito con un set di moduli di estensione per più framework che forniscono supporto per l'elaborazione JSON e/o il binding JSON-to-Java. Supporto maglia MOXy, JSON-P, Jackson e Jettison. Per maggiori dettagli, dai un'occhiata alla documentazione .
Analisi manuale del JSON
Se, per qualche motivo, è necessario analizzare manualmente l'entità richiesta, è possibile memorizzare l'entità richiesta in un String
:
Client client = ClientBuilder.newClient();
String json = client.target("http://example.com/api")
.path("people").path("1")
.request(MediaType.APPLICATION_JSON)
.get(String.class);
E quindi l'entità richiesta può essere analizzata manualmente utilizzando, ad esempio, Jackson :
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(json);
String name = node.path("name").asText();
Integer age = node.path("age").asInt();
Per analizzare manualmente il JSON, puoi anche considerare Gson.
Alternative
Per alternative su come utilizzare le API REST con Java, dai un'occhiata a questa risposta.