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
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.
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"
]
}
Essayez d'initialiser @ApiModelProperty
comme suit:
public class MyClass {
....
@ApiModelProperty(
position = 2, datatype="List", example = "PRD1, PRD2, PRD3"
)
private List<String> productIdentifiers;
....
}
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"]
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"
],