Bienvenue sur mon blog !

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).

swagger-api-modèle-pollué

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 :

swagger-api-modèle-clean

One Comment

Add a Comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *