wake-up-neo.com

swagger @ApiModelProperty-Beispielwert für die List <String> -Eigenschaft

Ich habe eine Klasse, in der es eine Eigenschaft gibt, die List<String>

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

Dieser Code generiert die folgenden Beispielwerte:

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

Die hier gezeigten Beispielwerte sind ungültig. Meine erwarteten Beispielwerte sollten wie folgt lauten:

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

Ich habe versucht, ein Beispielattribut wie folgt zu übergeben, aber es generiert keinen richtigen Wert:

@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

Kann ich auf irgendeine Weise einen geeigneten Beispielwert für die List-Eigenschaft generieren?

Update:

Ich habe die von @nullpointer und @Zeeshan Arif vorgeschlagenen Lösungen ausprobiert

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

Update 2:

Versuchte folgenden Ansatz, der nicht die richtige Antwort generiert

@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"

meine maven-abhängigkeit für swagger jar ist:

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

Update Github-Ticket für dieses Problem

38
Anil Bharadia

TLDR: Einer der Mitwirkenden an der Swagger-API hat an dieser Funktionalität gearbeitet, um diese in Version 3.0.0 hinzuzufügen, aber es ist noch nicht sicher, wann dies veröffentlicht wird. Im Moment befindet es sich im Feature/3.0.0-rc2-Zweig der Swagger-API GitHub

Ich arbeite jetzt seit fast zwei Monaten mit Swagger und als unser Projekt voranschritt, zeigten sich Probleme wie diese. Jetzt habe ich ein bisschen nachgeforscht und auf den GitHub-Seiten für die Swagger-API nachgelesen, dass diese Funktion (noch) nicht funktioniert.

Wie beschrieben hier und [hier wäre ein anderer Link, aber mein Ruf ist nicht hoch genug, um mehr als 2 Links zu posten] Diese Funktion wurde seit August mehrmals angefordert 2015 mit nicht viel Glück.

Nun zu diese Ausgabe auf dem Swagger-API-Github , kommentierte einer der Mitwirkenden:

Dies erfordert eine umfassende Überarbeitung der Modelle, die auf dem Weg ist. 3. März 2017

was zu einem späteren Kommentar führte:

Wird in der 3.0.0-Unterstützung unterstützt. Weitere Informationen finden Sie in der Verzweigung feature/3.0.0-rc2. 27. Juni 2017

Und am 9. August 2017 fragte jemand, wann das Release der Version 3.0.0 ohne weitere Antwort sein würde.

Abschließend wurde also an der Unterstützung von Beispielen für Arrays/Listen gearbeitet, die in Version 3.0.0 verfügbar sein sollten, aber keine weiteren Nachrichten darüber, wann diese veröffentlicht werden.

15
KoenC

Ich habe es geschafft, dies zum Laufen zu bringen und eine Liste von Strings zu generieren.

Definieren Sie in der ApiModelProperty den Datentyp als Liste und schreiben Sie Ihr Beispiel wie folgt:

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

Hier ist mein Beispiel:

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

Wenn ich die Swagger-Seite rendere, erhalte ich die folgende Ausgabe:

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

Sie verwenden nur die Reflection -Notation. Verwenden

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

funktioniert gut, aber ich kann keine Beispiele nennen.

Das ist das Ergebnis:

{
  "field": [
    "string"
  ]
}
4
Daniel Borges

Eine hässliche Umgehung, bis wir diese Funktion richtig unterstützt haben, die Beispiele für Listen mit nur einem Element erzeugt, aber es zumindest ermöglicht, etwas Nützlicheres als nur "string" Anzuzeigen, ist die Verwendung von allowableValues:

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

Versuchen Sie, @ApiModelProperty Wie folgt zu initialisieren:

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

Hier ist ein Arbeitsbeispiel für eine Liste von Objekten. Swagger Version 2.9.2. Alles, was benötigt wird, ist, dass der Datentyp als "Liste" definiert und in der Swagger-Dokumentation gerendert wird. Finden Sie im Anhang die ProductAll-Liste enter image description here im angehängten Bild gerendert.

@ApiModel
public class ProductGetAllDTO {
    @ApiModelProperty(example="20")
    private String count;
    @ApiModelProperty(dataType="List", value = "rows")
    private List<ProductAll> rows;
}
0
tksilicon

Dies scheint von der Swagger-API nicht unterstützt zu werden. In der Zwischenzeit können Sie mit diesem Springfox-Plugin ein Beispiel für eine Singleton-Liste (eine Werteliste) erstellen https://github.com/aaitmouloud/springfox-collection-example-plugin

Füge dies einfach zu dir hinzu pom.xml

<dependency>
    <groupId>com.github.aaitmouloud</groupId>
    <artifactId>springfox-collection-example-plugin</artifactId>
    <version>2.9.2</version>
</dependency>

Und importieren Sie die richtigen Klassen in Ihren Spring-Kontext

@ComponentScan({"springfox.collection.example.plugins"})

Sie sollten dann ein einzelnes Wertebeispiel für Ihre Eigenschaft deklarieren und es wird vom Plugin in ein Singleton-Listenbeispiel umgewandelt (funktioniert für alle Java.util.Collection Klassen)

@ApiModelProperty(value ="my property description", example = "2019-12-20T12:00:00")
@NotNull
private List<LocalDateTime> dates;

Haftungsausschluss : Ich bin der Autor dieses Plugins.

0
clapsus

Ich habe mein Beispiel in den folgenden Code geändert und es hat funktioniert.

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