swagger中@ApiModelProperty中example属性对List的支持

swagger中@ApiModelProperty注解example使用问题

example属性默认是String的, 对应List的支持不好

@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

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

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

依赖版本

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.7.0</version>
</dependency>

暂时还没有适配

TLDR: One of the contributers on Swagger-API has worked on this functionality to add this in version 3.0.0 but it's not sure yet when this will be released. For now it stands on the feature/3.0.0-rc2 branch at the Swagger-API GitHub

I've been working with Swagger for almost two months now and as our project progressed issues like this showed up. Now I did some research and read on the GitHub pages for the Swagger-API that this feature simply doesn't work (yet).

As described here and [here would be an other link but my reputation is not high enough to post more than 2 links] this feature has been requested several times since August 2015 with not much luck.

Now on this issue on the Swagger-API github, one of the contributors commented:

This takes a major refactoring of the models, which is on the way. 3 March 2017

which lead to a later comment:

Will be supported in 3.0.0 support, please see the feature/3.0.0-rc2 branch for details. 27 June 2017

And on 9 August 2017 someone asked when the release of version 3.0.0 would be with no further response.

So in conclusion, support for examples for arrays/Lists has been worked on and should be available in version 3.0.0 but no more news on when that would be released.

取巧的解决方法

# 此方法只能显示一个
public class MajorNutrientElements {
    @ApiModelProperty(name = "majorName", value = "食材名称", example = "西红柿", required = true)
    private String majorName;
    @ApiModelProperty(name = "nutrientElements", value = "食材对应的营养元素", allowableValues = "维生素E", required = true)
    private List<String> nutrientElements;
}

swagger中显示
{
  "majorName": "西红柿",
  "nutrientElements": [
    "维生素E"
  ]
}

如果不写example和allowableValues, 如下展示
 {
  "majorName": "西红柿",
  "nutrientElements": [
    "string"
  ]
} 

未验证,据说可以解决的

    @ApiModelProperty(value = "Address", name = "addLines", dataType = "List",
    example = "[AddLine1,AddLine2,AddLine3,AddLine4]")
    渲染出来:
    "addLines": [
      "AddLine1",
      "AddLine2",
      "AddLine3",
      "AddLine4"
    ]
    
    
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>

    <!-- Swagger 2 UI -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>

    <!-- Swagger 2 JSR-303 based documentation -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-bean-validators</artifactId>
        <version>2.9.2</version>
    </dependency>

站在巨人肩膀上摘苹果

https://www.it1352.com/972727.html

https://github.com/swagger-api/swagger-core/issues/1855

https://stackoverflow.com/questions/40989038/swagger-apimodelproperty-example-value-for-liststring-property/50132642#

posted @ 2020-09-01 13:36  未月廿三  阅读(11352)  评论(0编辑  收藏  举报