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);
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.