Logo site Des Geeks et des lettres

L'application pour surveiller / sauvegarder vos smartphonesL'oeil inquisiteur de Bibispy

Spring et Jackson : Filtrer les données pour éviter les LazyLoadingException

Vous utilisez Spring MVC et vous rencontrez des soucis lorsque vos contrôleurs REST transforment vos entités au format JSON alors que celles-ci contiennent des associations non chargées (lazy=true par défaut pour Hibernate 3+) ?

J’avais évoqué il y a quelques temps déjà une solution en utilisant un mapping Dozer différent selon les données à renvoyer, lecture ici, aujourd’hui le problème peut-être simplement évité en utilisant la  notion de « filtre » inclus dans la librairie Jackson utilisé par défaut dans Spring depuis la version 3 pour transformer vos objets Java au format JSON et vice versa.

spring-json

JsonIgnore

Ajouter cette annotation au niveau de votre association lazy loadée suffit à résoudre le problème, cependant elle est plutôt radicale, car de cette manière vous n’aurez jamais la possibilité de récupérer cette association au format JSON même si celle-ci est déjà chargée, elle sera tout simplement ignorée par Jackson.

J’utilise personnellement cette solution sur le champ « password » de mon entité « user » sur un autre projet, ainsi je suis sûr que le mot de passe ne pourra jamais être récupéré (même si bien entendu celui-ci est crypté) :

JsonFilter

C’est plutôt de cette solution que je voulais vous parler car elle est plus pratique et moins radicale, elle nous permet de choisir, selon nos cas d’utilisation, les données que l’on souhaite transformer en JSON avec Jackson et celles qui ne doivent pas l’être.

Pour cela il ne faut plus laisser Jackson prendre la main automatiquement sur la sortie de vos contrôleurs REST, c’est à présent à nous d’appeler explicitement la « mapper » de Jackson en lui donnant un filtre à appliquer :

  1. Ce n’est plus un Objet que l’on retourne mais une String
  2. Nous serializons l’objet en String avec Jackson + un filtre
  3. L’objet est annoté avec l’expression @JsonFilter

Exemple complet

Voici en exemple complet pour vous rendre compte que tout ceci se fait simplement et rapidement

  • Méthode du contrôleur qui soulève une exception

  • Méthode du contrôleur qui exclut l’association qui nécessite une requête supplémentaire

  • Entité User

Trois flèches vers le bas

1- Logiciel de brouillage d’adresse IP :

Contourner la censure en surfant anonyme

2- L’article explicatif :

La différence entre un proxy et un VPN

3- Comment espionner un smartphone (app) :

L’application de référence

Commentez ici

Article suivant:

Article précédent:

Recherche

A vos stylos !

  • Chris: “Bonjour, Quel est le nom de la table du plugin W3Total Cache car je ne la trouve…Déc 1, 09:22
  • Greg: “Liens de l'article mis à jour.Nov 27, 14:32
  • Greg: “Vraiment pénible ce problème. Pour ma part je l'ai résolu en créant un raccourci manuel dans mes favoris et en…Nov 20, 23:28
  • Jacqueline: “Je suis sur Safari.... même problème. Mon appli pour iPad ne fonctionne pas non plus.Nov 18, 08:44
  • Greg: “Ouais mais c'est vrai que ton article était bien senti. Ca le fait que tu le lises depuis Feedly :)…Nov 3, 21:00
  • Youness: “Bonjour, Merci pour cette article il ma aider enormement lors de la creation de mom projet Ma question…Nov 3, 20:29
Share This