Dozer : Utilisation avancée des Convertisseurs

 Article modifié dernièrement le 19 Avr 2011 @ 13 h 54 min

Introduction

Je vous avais présenté il y a quelques temps Dozer et son utilisation générale, aujourd’hui je vais vous présenter la façon dont j’utilise les « converter » (ou convertisseurs) spécifiques à cet outil de copie d’objets Java.

© http://image.made-in-china.com

© http://image.made-in-china.com

Les convertisseurs sont utilisés pour améliorer le mapping entre les objets à copier : lorsque dans le fichier de configuration XML de Dozer une classe A contient un attribut d’une classe B et qu’un convertisseur est nommé pour effectuer cette transformation alors c’est celui-ci qui est utilisé et non le le mapping de base de Dozer.

Utilisation standard

Lorsque le mapping entre deux classes est un peu complexe ou que Dozer, par défaut, ne permet pas de faire ce que l’on souhaite, alors les convertisseurs sont très utiles et efficaces.

Prenons un exemple simple : vous voulez convertir un objet de type java.lang.Boolean en java.lang.String et que le la valeur TRUE du premier devienne un « YES » et que la valeur FALSE un « NO » (et vice versa), voici comment procéder :

  • Fichier de configuration XML
  • Fichier de mapping (desgeeks-dozer-config.xml)
  • Convertisseur Java

Utilisation avancée

Etant donné que lorsqu’un convertisseur est nommé dans le fichier de mapping de Dozer c’est celui-ci qui est utilisé et plus le mapping de base pour la copie des attributs, cela veut dire que nous devons refaire le mapping pour chaque champ de notre objet à l’intérieur même du convertisseur.

Voici la solution que j’utilise pour s’affranchir du mapping « basique » afin de s’occuper, dans mes convertisseurs, uniquement des traitements spécifiques que Dozer ne peut faire naturellement.

Pour cela j’injecte le bean Spring dozerMapper dans mes bean ‘converter’ pour que les méthodes « convertTo » et « convertFrom » puissent appeler le mapping standard de Dozer avant d’effectuer des conversions spécifiques :

Cela permet d’appeler en premier la copie de l’objet Card vers CardRemote par le biais du mapping Dozer :

puis d’effectuer des traitements spécifiques de conversion de l’objet Card vers CardRemote.

Pour le convertisseur « setConvertId » nommé dans ci-dessus, je procède de la même façon pour que tout se fasse tout seul

Conclusion

L’avantage de la seconde solution est qu’à présent vous pouvez utiliser directement vos classes « converter » dans vos propres classes utilitaires car ceux-ci comprennent déjà le mapping de Dozer qui est appelé implicitement dans vos méthodes « convertTo » et « convertFrom ».

Je ne sais pas si beaucoup d’entre vous utilisent Dozer dans vos architectures distribuées mais pour ma part c’est un « must have », à vous de tester !

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

  • Greg 5 mai 2010, 13 01

    « Mais à quoi ça sert de transvaser les données de mon objet vers un autre ? » Nan je rigole, tu donnes la réponse à cette question dans ton premier article ici 😀

  • Mimie 5 mai 2010, 13 01

    Klr, il est chouette cet outil, j’ai déjà converti mes collègues de bureau à l’utiliser dans leur projet perso 😀 ^^

Article suivant:

Article précédent:

Share This