Un Webservice REST avec SpringMVC et cracher du JSON? C’est facile!!!

Vous ne savez pas ce que c’est que Spring? Pas grave. Vous ne savez pas ce que c’est que du REST? Heeu là c’est moyen, mais vous allez vite comprendre. Vous ne savez pas coder en Java ? Désolé, cet article n ‘est pas fait pour vous🙂

Sinon pour tout le reste, je vous propose un template d’une application fonctionnelle qui vous permettra de développer très rapidement un web service REST en Java.

Ce que je n’expliquerai pas

Je ne parlerai pas de comment programmer en Java, de ce que c’est que REST, de ce que c’est que Spring, ni de MVC encore moins SpringMVC et finalement pas de JSON non plus🙂. Plus bas en fin d’article, quelques liens utiles et sympa pour apprendre un petit peu tout ça.

Ready? Go go go!

SpringMVC inclus depuis la version 3, le support de REST dans ses contrôleurs MVC.

Le principe est simple et efficace (à la Spring quoi):

  • Un mapper d’URL à intercepter et la méthode du contrôleur à exécuter
  • Des annotations pour récupérer automatiquement les variables/valeurs dans les URLs REST
  • Des annotations pour détecter le type d’application HTTP de la requête
  • Des annotations pour rendre un type de données en réponse (XML, JSON…)
  • Des vues à spécifique pour faire de la conversion d’objets en structures (XML, JSON…)
  • D’autres choses super sympa!

Le projet s’articule donc autour de 4 éléments:

  • un modèle de données (POJOs): objet User
  • un wrapper de Users permettant de rendre en JSON une liste de Users
  • un contrôleur de vue HTML/JSP (pour les vraies pages web)
  • un contrôleur REST pour la partie web service

Ouaissssss du code🙂

User.java

/**
 * @author Zoumana TRAORE
 * Simple Java POJO
 */
public class User {

    private String name;
    private String fistname;
    private int age;

WrapperUsers.java

/**
 * @author Zoumana TRAORE
 * Wrapper to generate JSON for a list of Users
 *
 */
public class WrapperUsers {

    private int number;
    private List<User> users;

RestController.java

/**
 * @author Zoumana TRAORE
 * Handles requests for the REST interface which renders JSON
 */
@Controller
public class RestController {

    /**
     * Call like this http://localhost:8080/restdemo/rest/501, it gives you JSON object
     * 
     * @param age
     * @param model
     * @param request
     * @param response
     * @return
     */
    @RequestMapping(value = "/rest/{age}")
    @ResponseBody
    public Object getUser(@PathVariable int age, Model model, HttpServletRequest request, HttpServletResponse response) {
        User zoumana = new User("TRAORE", "Zoumana", age);
        return zoumana;
    }

    /**
     * Call like this http://localhost:8080/restdemo/rest/users, it gives you JSON objects
     * 
     * @param model
     * @param request
     * @param response
     * @return
     */
    @RequestMapping(value = "/rest/users")
    @ResponseBody
    public Object getUsers(Model model, HttpServletRequest request, HttpServletResponse response) {

        User zoumana = new User("TRAORE", "Zoumana", 26);
        User visitor = new User("VISITOR", "You", 27);

        WrapperUsers users = new WrapperUsers();
        List<User> listOfUsers = new ArrayList<User>();
        listOfUsers.add(zoumana);
        listOfUsers.add(visitor);

        users.setUsers(listOfUsers);
        return users;
    }
}

jaxb.index: nécessaire afin d’assurer la conversion des objets de votre modèle de données en JSON ou XML (il est à placer dans le package .model et contient le listing de vos noms de classes du modèle de données)

User
WrapperUsers

Tests: couples (URL appel, JSON réponse)

http://localhost:8080/restdemo/rest/26
{"name":"TRAORE","fistname":"Zoumana","age":26}

http://localhost:8080/restdemo/rest/users
{"number":2,"users":[{"name":"TRAORE","fistname":"Zoumana","age":26},{"name":"VISITOR","fistname":"You","age":27}]}

La suite, pour aller plus loin?

Pour peu que vous sachiez coder en Java, il vous suffit de comprendre la notion d’URL-Mapping de SpringMVC (très bien décrite dans le lien que je vous laisse à la fin de l’article), puis:

    • Vous définissez vos URL REST et la méthode Java associée au traitement
    • Comme toutes les méthodes classiques Java, vous codez votre métier
    • Définissez bien le type de retour que vous attendez: objet simple ou wrapper ou DTO et construire la classe Java qui convient le plus
    • Ajoutez cette classe dans jaxb.index

retour à la fin de voter méthode votre classe adéquate et c’est joué!

Github = sources, Cloudbees = démo

Liens utiles

2 réflexions sur “Un Webservice REST avec SpringMVC et cracher du JSON? C’est facile!!!

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s