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>
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で利用可能になるはずですが、いつリリースされるかについてのニュースはありません。
これをなんとかして、文字列のリストを生成しました。
ApiModelProperty内で、データ型をリストとして定義し、例を次のように記述します。
example = "[AddLine1,AddLine2,AddLine3,AddLine4]"
これが私の例です:
@ApiModelProperty(value = "Address", name = "addLines", dataType = "List",
example = "[AddLine1,AddLine2,AddLine3,AddLine4]")
Swaggerページをレンダリングすると、次の出力が得られます。
"addLines": [
"AddLine1",
"AddLine2",
"AddLine3",
"AddLine4"
],
この機能が適切にサポートされるまでのい回避策は、要素が1つだけのリストの例を生成しますが、少なくともallowableValues
を使用することで"string"
よりも有用なものを表示できます。
@ApiModelProperty(position = 2, allowableValues = "PRD1")
// This generates -> "productIdentifiers": ["PRD1"]
次のように@ApiModelProperty
を初期化してください。
public class MyClass {
....
@ApiModelProperty(
position = 2, datatype="List", example = "PRD1, PRD2, PRD3"
)
private List<String> productIdentifiers;
....
}
オブジェクトのリストの実用的な例を次に示します。 Swaggerバージョン2.9.2。必要なのは、dataTypeが「リスト」として定義することだけで、それはswaggerドキュメントでレンダリングされます。 ProductAllリストを添付してください 添付画像にレンダリングされます。
@ApiModel
public class ProductGetAllDTO {
@ApiModelProperty(example="20")
private String count;
@ApiModelProperty(dataType="List", value = "rows")
private List<ProductAll> rows;
}
これは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;
免責事項:私はこのプラグインの著者です。
私の例を次のコードに変更しましたが、うまくいきました。
public class MyClass {
....
@ApiModelProperty(
position = 2, datatype="List", example = "'[''{''PRD1''}','{''PRD2''}'']"
)
private List<String> productIdentifiers;
....
}