Swagger et play 2.3 avec Ebean : EntityBeanIntercept
|Le but de cet article n’est pas d’expliquer le fonctionnement de Swagger, de playframework ou d’ebean. Mais de montrer la solution à un petit problème d’affichage des objets persisté en base avec Ebean dans l’interface de Swagger. A savoir l’affichage de la classe EntityBeanIntercept.
Prenons comme exemple, la classe AtlasFishFamily qui possède deux champs, un identifiant et un nom. Un objet de cette classe est passé en entrée de l’API dont nous voyons la présentation avec swagger sur l’image ci-dessous. La classe nous apparaît plus complexe (à droite de l’image) car la classe AtlasFishFamily étend la classe Model (Ebean).
Ce problème peut être facilement corrigé, en indiquand à Swagger d’ignorer la classe EntityEbeanIntercept.
1) Ajouter la classe CustomConverter.scala
- import com.wordnik.swagger.converter.ModelConverters
- import com.wordnik.swagger.converter.SwaggerSchemaConverter
- class CustomConverter extends SwaggerSchemaConverter {
- override def skippedClasses: Set[String] = Set("com.avaje.ebean.bean.EntityBeanIntercept")
- override def ignoredClasses: Set[String] = Set("com.avaje.ebean.bean.EntityBeanIntercept")
- override def ignoredPackages: Set[String] = Set("com.avaje.ebean")
- }
2) Au démarrage de play, faire prendre connaissance de ce converter à Swagger
- public class Global extends GlobalSettings {
- @Override
- public void beforeStart(Application application) {
- super.beforeStart(application);
- // TODO Swagger : Ajout d'un converter
- ModelConverters.addConverter(new CustomConverter(), true);
- }
- ...
- }
Voici le résultat dans l’interface de Swagger :
Il manque la version de Swagger utilisée (+ version swagger ui?)
Taz