swagger @ApiModelProperty exemple de valeur pour la propriété List

j'ai une classe dans laquelle il y a une propriété qui est List<String>

public class MyClass {
    ....
    @ApiModelProperty(position = 2)
    private List<String> productIdentifiers;
    ....
}

ce code génère les valeurs d'exemple suivantes:

{
  "customerId": "1001",
  "productIdentifiers": [
    "string"
  ],
  "statuses": [
    "NEW"
  ]
}

Les valeurs d'exemple montré ici ne sont pas valides. Mes valeurs d'exemple attendues devraient être comme:

{
  "customerId": "1001",
  "productIdentifiers": [
    "PRD1",
    "PRD2",
    "PRD3"
  ],
  "statuses": [
    "NEW"
  ]
}

j'ai essayé de passer l'attribut example comme suit mais il ne génère pas de valeur correcte:

@ApiModelProperty(position = 2, example = "PRD1, PRD2, PRD3")
// This generates -> "productIdentifiers": "PRD1, PRD2, PRD3" // Its not json array

@ApiModelProperty(position = 2, example = "["PRD1", "PRD2", "PRD3"]")
// This generates -> "productIdentifiers": "["PRD1", "PRD2", "PRD3"]" // Its too not json array

y a-t-il un moyen de générer une valeur d'exemple correcte pour la propriété List ?

mise à Jour :

<!-J'ai essayé les solutions suggérées par @nullpointer et @Zeeshan Arif

@ApiModelProperty(position = 2, dataType="List", example = "PRD1, PRD2, PRD3")
private List<String> productIdentifiers;
//This generates -> `"productIdentifiers": "PRD1, PRD2, PRD3"`

mise à Jour 2 :

essayé de suivre l'approche qui ne pas générer la bonne réponse

@ApiModelProperty(position = 2, dataType="java.util.List<String>", example = "PRD1, PRD2, PRD3")
// This generates -> "productIdentifiers": "PRD1, PRD2, PRD3"


@ApiModelProperty(position = 2, dataType="String[]", example = "PRD1, PRD2, PRD3")
// This generates -> "productIdentifiers": "PRD1, PRD2, PRD3"

ma dépendance maven pour swagger pot est :

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.5.0</version>
    <exclusions>
        <exclusion>
            <artifactId>mapstruct</artifactId>
            <groupId>org.mapstruct</groupId>
        </exclusion>
    </exclusions>
</dependency>

mise à Jour github ticket pour ce problème

25
demandé sur naXa 2016-12-06 09:23:26

5 réponses

TLDR: L'un des contributeurs de L'API Swagger a travaillé sur cette fonctionnalité pour l'ajouter dans la version 3.0.0 mais il n'est pas encore sûr quand elle sera publiée. Pour l'instant, il se trouve sur la branche feature/3.0.0-rc2 de la Swagger-API GitHub

je travaille avec Swagger depuis près de deux mois maintenant et au fur et à mesure que notre projet progressait, des problèmes comme celui-ci sont apparus. Maintenant j'ai fait quelques recherches et j'ai lu sur les pages GitHub pour L'API Swagger que cette fonctionnalité ne fonctionne tout simplement pas travail (encore).

Comme décrit ici et [ici serait un autre lien, mais ma réputation n'est pas assez élevé pour poster plus de 2 liens] cette fonctionnalité a été demandée plusieurs fois depuis août 2015 avec peu de chance.

Maintenant ce problème sur le Talent de l'API github, l'un des contributeurs a commenté:

cela nécessite un remaniement majeur des modèles, qui est en route. 3 mars 2017

ce qui conduit à un commentaire ultérieur:

sera pris en charge dans 3.0.0 support, veuillez voir la fonctionnalité/3.0.0-rc2 branch pour plus de détails. 27 juin 2017

Et 9 août 2017 quelqu'un a demandé quand la version 3.0.0 serait sans réponse.

en conclusion, le support d'exemples de tableaux / listes a été travaillé et devrait être disponible en version 3.0.0 mais plus de nouvelles sur la date de sortie.

10
répondu KoenC 2017-09-19 15:09:32

il Vous suffit d'utiliser Reflection la notation. En utilisant

@ApiModelProperty(dataType = "[Ljava.lang.String;")

fonctionne bien, mais je ne peux pas mettre des exemples.

voici le résultat:

{
  "field": [
    "string"
  ]
}
3
répondu Daniel Borges 2017-05-24 18:13:58

Essayez d'initialiser @ApiModelProperty comme suit:

public class MyClass {
    ....
    @ApiModelProperty(
        position = 2, datatype="List", example = "PRD1, PRD2, PRD3"
    )
    private List<String> productIdentifiers;
    ....
}
1
répondu Zeeshan Arif 2017-07-11 09:20:36

une mauvaise solution jusqu'à ce que nous ayons cette fonctionnalité correctement supportée, qui produit des exemples pour les listes avec un seul élément, mais permet au moins de montrer quelque chose de plus utile que juste "string" en utilisant allowableValues:

@ApiModelProperty(position = 2, allowableValues = "PRD1")
// This generates -> "productIdentifiers": ["PRD1"]
0
répondu Helder Pereira 2017-11-30 16:58:12

j'ai réussi à faire en sorte que cela fonctionne, générant une liste de chaînes.

dans L'ApiModelProperty, définissez le type de données comme une liste, et écrivez votre exemple comme suit:

example = "[AddLine1,AddLine2,AddLine3,AddLine4]"

Voici mon exemple:

@ApiModelProperty(value = "Address", name = "addLines", dataType = "List",
    example = "[AddLine1,AddLine2,AddLine3,AddLine4]")

Quand j'ai rendu le style de la page, j'obtiens le résultat suivant:

"addLines": [
      "AddLine1",
      "AddLine2",
      "AddLine3",
      "AddLine4"
    ],
0
répondu dane_griffiths 2018-05-02 10:38:51