web-dev-qa-db-ja.com

List <String>プロパティの@ApiModelProperty値の例

List<String>という1つのプロパティがあるクラスが1つあります

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

このコードは、次のようにサンプル値を生成します。

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

ここに示されている値の例は無効です。私の期待値の例は次のようになります:

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

サンプル属性を次のように渡そうとしましたが、適切な値を生成していません。

@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

Listプロパティの適切なサンプル値を生成する方法はありますか?

更新:

@nullpointerと@Zeeshan Arifによって提案された解決策を試しました

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

更新2:

did notが適切な応答を生成するアプローチを試みました

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

swagger jarの私のMaven依存関係は次のとおりです:

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

更新この問題のgithubチケット

38
Anil Bharadia

TLDR:Swagger-APIの貢献者の1人がこの機能に取り組んでバージョン3.0.0でこれを追加しましたが、いつリリースされるかはまだわかりません。今のところ、Swagger-API GitHubのfeature/3.0.0-rc2ブランチ上にあります。

Swaggerを使用して2か月近くになりますが、プロジェクトが進行するにつれてこのような問題が発生しました。今、私はいくつかの調査を行い、Swagger-APIのGitHubページで、この機能が(まだ)動作しないことを読みました。

こちら and[こちらは他のリンクになりますが、私の評判は2つ以上のリンクを投稿するには不十分です] 2015年8月以降、運はあまりありません。

Swagger-API githubのこの問題 では、貢献者の1人がコメントしました:

これにはモデルの主要なリファクタリングが必要であり、現在進行中です。 2017年3月3日

後のコメントにつながる:

3.0.0サポートでサポートされます。詳細については、feature/3.0.0-rc2ブランチを参照してください。 2017年6月27日

そして、2017年8月9日誰かが、バージョン3.0.0のリリースがそれ以上の応答なしでいつになるか尋ねました。

したがって、結論として、配列/リストの例のサポートに取り組んでおり、バージョン3.0.0で利用可能になるはずですが、いつリリースされるかについてのニュースはありません。

15
KoenC

これをなんとかして、文字列のリストを生成しました。

ApiModelProperty内で、データ型をリストとして定義し、例を次のように記述します。

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

これが私の例です:

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

Swaggerページをレンダリングすると、次の出力が得られます。

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

この機能が適切にサポートされるまでのい回避策は、要素が1つだけのリストの例を生成しますが、少なくともallowableValuesを使用することで"string"よりも有用なものを表示できます。

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

次のように@ApiModelPropertyを初期化してください。

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

オブジェクトのリストの実用的な例を次に示します。 Swaggerバージョン2.9.2。必要なのは、dataTypeが「リスト」として定義することだけで、それはswaggerドキュメントでレンダリングされます。 ProductAllリストを添付してください enter image description here 添付画像にレンダリングされます。

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

これはSwagger APIではサポートされていないようです。それまでは、このSpringfoxプラグインを使用して、シングルトンリストの例(1つの値リスト)を生成できます https://github.com/aaitmouloud/springfox-collection-example-plugin

これをあなたに追加してくださいpom.xml

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

そして、適切なクラスをSpringコンテキストにインポートします

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

次に、プロパティで単一の値の例を宣言する必要があり、プラグインによってシングルトンリストの例に変換されます(すべてのJava.util.Collectionクラスで機能します)

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

免責事項:私はこのプラグインの著者です。

0
clapsus

私の例を次のコードに変更しましたが、うまくいきました。

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