swagger @ApiModelProperty List 属性的示例值
我有一个类,其中有一个属性是List
public class MyClass { .... @ApiModelProperty(position = 2) private List 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 productIdentifiers; //This generates -> `"productIdentifiers": "PRD1, PRD2, PRD3"`
更新2:
试图采用以下方法, 但没有产生适当的反应
@ApiModelProperty(position = 2, dataType="java.util.List", 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依赖是:
io.springfox springfox-swagger2 2.5.0 mapstruct org.mapstruct
更新 此问题的github票证
TLDR:Swagger-API的贡献者之一已经致力于在3.0.0版本中添加此function,但目前还不确定何时发布。 目前它位于Swagger-API GitHub的feature / 3.0.0-rc2分支上
我已经和Swagger一起工作了将近两个月,随着我们项目的进展,这样的问题出现了。 现在我做了一些研究并阅读了Swagger-API的GitHub页面,这个function根本不起作用。
如此处所述和[这里将是另一个链接,但我的声誉不足以发布超过2个链接]自2015年8月以来已经多次请求此function,运气不佳。
现在关于Swagger-API github上的这个问题 ,其中一个贡献者评论道:
这需要对模型进行重大的重构,这正在进行中。 2017年3月3日
这导致后来的评论:
将支持3.0.0支持,详情请见function/ 3.0.0-rc2分支。 2017年6月27日
2017年8月9日,有人询问3.0.0版本何时发布没有进一步回复。
总而言之,对数组/列表的示例的支持已经开始工作,并且应该在3.0.0版本中可用,但是没有关于何时发布的新闻。
您只需使用Reflection
符号。 运用
@ApiModelProperty(dataType = "[Ljava.lang.String;")
工作正常,但我不能举例。
这是结果:
{ "field": [ "string" ] }
尝试初始化@ApiModelProperty
,如下所示:
public class MyClass { .... @ApiModelProperty( position = 2, datatype="List", example = "PRD1, PRD2, PRD3" ) private List productIdentifiers; .... }
一个丑陋的解决方法,直到我们正确支持这个function,这为只有一个元素的列表生成示例,但至少允许显示比"string"
更有用的东西是使用allowableValues
:
@ApiModelProperty(position = 2, allowableValues = "PRD1") // This generates -> "productIdentifiers": ["PRD1"]
我设法让这个工作,生成一个字符串列表。
在ApiModelProperty中,将数据类型定义为List,并按如下方式编写示例:
example = "[AddLine1,AddLine2,AddLine3,AddLine4]"
这是我的例子:
@ApiModelProperty(value = "Address", name = "addLines", dataType = "List", example = "[AddLine1,AddLine2,AddLine3,AddLine4]")
当我渲染swagger页面时,我得到以下输出:
"addLines": [ "AddLine1", "AddLine2", "AddLine3", "AddLine4" ],