Fred Talks

Des petites solutions pour des petits problèmes…

Rest Client Get avec Spring

30 Apr 2015

La mise en œuvre d'un client REST Get peut être facilement réalisée en utilisant la librairie Spring 4.

Près-requis

Vous avez une environnement Eclipse fonctionnel avec à minima un jdk 1.6 et un tomcat 7.0.
Vous avez réalisé et réussi le tutorial Rest Web Service Get avec Spring.

Préparation du projet

Pour commencer, je vous invite à récupérer le squelette du projet sur mon github dans un répertoire projet via les commandes :

git clone https://github.com/draoullig/SpringRestClient.git

cd SpringRestClient

git checkout step0

mkdir src

Importer le projet sous Eclipse via File>Import>General>Existing Projects into Workspace et sélectionner SpringRestClient dans le répertoire dans lequel vous avez réalisé le git clone, puis finissez l'import.

Dans la vue "Java EE - Eclipse", ajouter le package fr.gillouard.spring.restclient via un click droit sur src>New>Package et valider.

Les librairies nécessaires au projet sont présentes dans le répertoire /lib.

Pojo

Les classes Pojo vont permettre de récupérer le modèle issu du web service Rest.

Package

Création d'un nouveau package pojo sous le package fr.gillouard.spring.restclient.
Pour cela faire un clic droit sur le package fr.gillouard.spring.restclient et cliquer sur New/Package.
Ajouter .pojo à fr.gillouard.spring.restclient dans le champs Name de la boite de dialogue New Java Package et cliquer sur Finish.

Client

Copier la classe Client présent dans le projet SpringRestWS sous le package fr.gillouard.spring.restws.pojo dans le package fr.gillouard.spring.restclient.pojo du projet SpringRestClient.

Pour la conversion java à json, il est nécessaire d'ajouter un constructeur par défaut à cette classe après la dernière déclaration de membre privé :

/**
  * Constructeur par defaut.
  */
 public Client() {

 }

RestClient

La classe RestClient effectue l'appel vers le web service Rest et affiche dans la console les résultats de l'appel.

Création d'une nouvelle classe dans le package fr.gillouard.spring.restclient. Pour cela faire un clic droit sur le package fr.gillouard.spring.restclient et cliquer sur New/Class.
Saisir RestClient dans le champs Name de la boite de dialogue New Java Class, supprimer le .pojo dans le nom du package du champs Package et cocher public static void main(String[] args) puis cliquer sur Finish.
Ouvrir le fichier RestClient.java en double cliquant dessus.

Ajouter les imports suivants :

import java.util.List;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpMethod;
import org.springframework.web.client.RestTemplate;
import fr.gillouard.spring.restclient.pojo.Client;

Ajouter le code suivant à la fonction main de la classe :

final List<Client> clients = new RestTemplate().exchange(
    "http://localhost:8080/SpringRestWS/client", HttpMethod.GET, null,
    new ParameterizedTypeReference<List<Client>>() {
    }).getBody();
  System.out.println(new StringBuilder("Taille de la liste : ").append(
    clients.size()).toString());
  for (final Client client : clients) {
   System.out.println(new StringBuilder(client.getNom()).append(" ")
     .append(client.getPrenom()).toString());
  }

La classe RestTemplate de Spring encapsule toute la mécanique d'appel à un service REST.
Il est nécessaire de préciser l'url de destination, la méthode d'appel, les paramètres éventuels et le type de retour.
Pour la conversion de données entre le java et le json, Spring utilise les librairies Jackson ce qui demande dans notre cas de définir explicitement le type de retour parce que nous attendons une liste de client via l'instruction new ParameterizedTypeReference<List<Client>>() {}. Si ce paramétrage est absent, nous obtiendrions une liste de type LinkedHashMap qui est la conversion par défaut de Jackson pour un flux json représentant une liste.
Les instructions suivantes affichent la taille de la liste, les noms et prénoms récupérés.

Runtime

Pour tester le client, il est nécessaire de déployer le projet CodelabRestWS sous un Tomcat v7.0 et de l'exécuter (Se référer au tutorial correspondant).
Effectuer un clic droit sur la classe RestClient dans la vue Project Explorer, puis Debug As/Java Application.

La vue Console devrait ressembler à ceci :

Taille de la liste : 3
Dupont Jules
Martin Anne
Le Gall Bruno

Conclusion

Ce tutorial a permis d'expliquer la mise en oeuvre d'un client REST en utilisant Spring.
Les tutoriaux suivants permettront de compléter la richesse fonctionnelle de ce client.

Solution

L'ensemble des sources de ce tutorial est disponible sous le tag step1.