51 votes

Exemple de swagger @ApiModelProperty pour List <String> propriété

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 de la valeur d'exemple de la manière suivante:

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

Les valeurs d'exemple montré ici ne sont pas valides. Mon attendus des exemples de valeurs devrait ressembler à :

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

J'ai essayé en passant exemple d'attribut comme suit, mais il n'est pas de générer de la valeur ajoutée:

@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

Est-il possible que je peux générer bon exemple de valeur pour la propriété de Liste ?

Mise à jour :

J'ai essayé les solutions proposé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 une approche qui n'a pas de 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

26voto

dane_griffiths Points 51

J'ai réussi à le faire fonctionner, en générant une liste de chaînes.

Dans ApiModelProperty, définissez le type de données en tant que 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]")
 

Lorsque je rends la page swagger, j'obtiens le résultat suivant:

 "addLines": [
      "AddLine1",
      "AddLine2",
      "AddLine3",
      "AddLine4"
    ],
 

17voto

KoenC Points 157

TLDR: l'Un des contributeurs sur Swagger-API travaille sur cette fonctionnalité pour l'ajouter cela dans la version 3.0.0, mais il ne sait pas encore quand ce sera publié. Pour l'instant, il se dresse sur la fonctionnalité/3.0.0-rc2 direction générale de l'Arrogance de l'API GitHub

J'ai travaillé avec Swagger pendant près de deux mois maintenant, et que notre projet a évolué les questions de ce genre ont montré jusqu'à. Maintenant, j'ai fait quelques recherches et de lire sur le GitHub pages pour de l'Arrogance de l'API que cette fonctionnalité ne marche tout simplement pas (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 reprises depuis le mois d'août 2015, avec pas beaucoup de chance.

Maintenant, sur cette question de la Supériorité de l'API github, l'un des contributeurs a commenté:

Cela prend du refactoring de modèles, qui est sur le chemin. 3 Mars 2017

qui, conduire à un commentaire:

Seront pris en charge dans 3.0.0 de soutien, veuillez consulter la fonctionnalité/3.0.0-rc2 branche pour plus de détails. 27 juin 2017

Et sur 9 août 2017, quelqu'un a demandé, lors de la sortie de la version 3.0.0 serait avec aucune autre réponse.

Donc, en conclusion, de soutien pour les exemples de tableaux/Listes a été élaborée et devrait être disponible dans la version 3.0.0 mais pas plus de nouvelles quand cela serait libéré.

9voto

Daniel Borges Points 93

Vous utilisez simplement la notation Reflection . En utilisant

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

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

Voici le résultat:

 {
  "field": [
    "string"
  ]
}
 

2voto

Zeeshan Arif Points 89

Essayez d’initialiser @ApiModelProperty comme suit:

 public class MyClass {
    ....
    @ApiModelProperty(
        position = 2, datatype="List", example = "PRD1, PRD2, PRD3"
    )
    private List<String> productIdentifiers;
    ....
}
 

2voto

Helder Pereira Points 1254

Une solution de contournement laide jusqu’à ce que cette fonctionnalité soit correctement prise en charge, qui produit des exemples pour les listes avec un seul élément, mais permet au moins d’afficher quelque chose de plus utile que simplement "string" en utilisant allowableValues :

 @ApiModelProperty(position = 2, allowableValues = "PRD1")
// This generates -> "productIdentifiers": ["PRD1"]
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X