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);
Author: BalusC, 2016-03-31

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.

 6
Author: Cassio Mazzochi Molin, 2017-05-23 12:16:28