Beaucoup de développeur ont eu l’occasion de travailler sur de l’XML, donc de générer des classes Java correspondante. Ainsi beaucoup on pu automatiser la génération de classe java correspondante au fichier XML en utilisant des outils tel que xjc qui génère les classes Java (JAXB) à partir de XSDs.
J’ai rencontré récemment cette problématique en devant développer un client de WebServices REST. Une API m’a été fourni avec des exemples de flux JSON. En tant que développeur, donc en tant que fainéant, je n’ai pas voulu écrire les POJOs correspondant à la main. J’ai donc utilisé JsonSchema afin de générer des schémas Json à partir d’exemple de flux , l’équivalent de XSD pour le XML. Et à partir de ces schémas que j’ai inclus dans mon projet maven, j’ai généré automatiquement les POJOs grâce au plugin maven jsonschema2pojo.
Voici un extrait du pom dans lequel je configure le plugin :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<plugin> <groupId>org.jsonschema2pojo</groupId> <artifactId>jsonschema2pojo-maven-plugin</artifactId> <version>0.4.15</version> <configuration> <sourceDirectory>${basedir}/src/main/json-schema/</sourceDirectory> <outputDirectory>${project.build.directory}/generated-sources/json</outputDirectory> <targetPackage>fr.examples.models.json</targetPackage> <annotationStyle>none</annotationStyle> <useLongIntegers>true</useLongIntegers> <initializeCollections>true</initializeCollections> <includeConstructors>true</includeConstructors> <usePrimitives>true</usePrimitives> </configuration> <executions> <execution> <goals> <goal>generate</goal> </goals> </execution> </executions> </plugin> |
Ce plugin supporte les mappers Json les plus utilisés tel que Jackson, Gson. Pour annoter les classes java suivant le mapper voulu, il suffit au niveau de annotationStyle de spécifié le mapper que l’on veut utiliser (jackson1 et 2, gson ou rien).
C’est facile et simple d’utilisation et cela permet de rapidement modéliser des format de données json et du coup générer du code automatiquement, car les fournisseurs REST n’ont pas forcément modéliser leur API au sens XSD.
Et nous verrons dans un prochain article qu’il existe des outils pour pouvoir modéliser son API REST (RAML, SWAGGER) permettant ainsi à des clients de conceptualiser rapidement leurs clients REST.