mercredi 19 janvier 2011

Play framework : exporter ses objets en JSON

Avec Play il est extrêmement facile de créer un service REST qui expose les objets du modèle au format JSON.


Si on écrit cette ligne dans le fichier routes :

GET /albums.json            Application.listAlbumsInJson

Et cette méthode dans le contrôleur :

public static void listAlbumsInJson(){
        List<Album> albums = Album.findAll();
        renderJSON(albums);
    }

L'appel de l'URL http://monappli/albums.json renverra directement notre liste d'objets albums au format JSON. Difficile de faire plus simple!

Autre astuce (que j'ai découvert grâce site zengularity.com) : pour déterminer directement le format de données à partir de l'URL, il est possible d'utiliser cette syntaxe dans le fichier routes :

GET /albums.{<json|xml>format} Application.listAlbums

En appelant /albums.xml , Play appelera la méthode listAlbums() avec le paramètre 'format' initialisé à 'xml', et en appelant /albums.json ce même paramètre aura la valeur 'json'.

On peut ensuite s'en servir dans le contrôleur :

public static void listAlbums() {
               List<Album> albums = Album.all().fetch();
         if(request.format.equals("json"))
            renderJSON(albums);
         else render(albums);
    }

Si vous tapez l'URL /albums.xml, Play cherchera un fichier de template XML nommé listAlbums.xml (une autre extension fonctionnerait aussi) pour effectuer le rendu.

Pour en savoir plus sur l'écriture de services REST avec Play (notamment sur les templates XML) vous pouvez consulter cet article.
J'ai également mis à jour mon application d'exemple pour Play framework pour exposer des services en JSON en plus du XML.