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