Comment créer un client REST pour les services REST mondiaux externes


Comment puis-je créer un client rest à l'aide de l'API JAX-RS Client fluent pour le service REST mondial externe?

Par exemple, supposons qu'un service renvoie à une personne des objets ayant deux nom de champ et âge.

Quels que soient les exemples/tutoriels que j'ai rencontrés, ils font la même chose que l'extrait ci-dessous ou ils développent le client dans le même projet afin de remplacer la chaîne.classe avec personne.classe. Comment dois-je créer un client indépendant qui me rendra pojo de personne.

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

Demander une entité et la mapper à une classe Java

Considérez, par exemple, que vous consommez une API REST qui fournit le JSON suivant lors de l'exécution d'une requête GET à http://example.com/api/people/1:

{
  "name": "John Doe",
  "age": 25
}

Le JSON ci-dessus peut être mappé à une classe Java, définie comme suit:

public class Person {

    private String name;

    private Integer age;

    // Constructor, getters and setters omitted
}

En utilisant l'API client JAX-RS, le JSON peut être demandé comme suit, en mappant l'entité demandée à la 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 fait partie du JAX-RS 2.0 spécification et l'implémentation de référence est Maillot.

Pour analyser JSON, Jersey est livré avec un ensemble de modules d'extension pour plusieurs frameworks qui prennent en charge le traitement JSON et/ou la liaison JSON-Java. Maillot soutient MOXy, JSON-P, Jackson et Larguer. Pour plus de détails, consultez la documentation .

Analyser le JSON manuellement

Si, pour une raison quelconque, vous devez analysez l'entité demandée manuellement, vous pouvez stocker l'entité demandée dans 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);

Puis l'entité demandée peut être analysée manuellement en utilisant, par exemple, Jackson :

ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(json);

String name = node.path("name").asText();
Integer age = node.path("age").asInt();

Pour analyser le JSON manuellement, vous pouvez également considérer Gson.

Alternatives

Pour des alternatives sur la façon de consommer les API REST avec Java, jetez un oeil à cette réponse.

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