如何将Swagger文档的@ApiModelProperty数据类型设置为String


问题内容

我正在使用Spring MVC(通过Spring Boot),并使用swagger-spring-mvc库集成了Swagger API文档。

我有一堂课,看起来像这样:

@ApiModel
public class CartItem {
    ...
    private Money listPrice; // joda money class

    @JsonSerialize(using = ToStringSerializer.class)
    @ApiModelProperty(required = true, dataType = "java.lang.String")
    public Money getListPrice() {
        return listPrice;
    }
    ...
}

由于我在此字段中使用ToStringSerializer,因此它将在JSON中返回listPrice.toString,换句话说:

{
    "listPrice": "USD 10.50"
}

但是,昂首阔步的文档不支持dataType =“ java.lang.String”。它将响应模型显示为:

"CartItem": {
    "description": "",
    "id": "CartItem",
    "properties": {
        "listPrice": {
            "required": false,
            "type": "Money"
        }
    }
}

我尝试将@ApiModelProperty批注以及该方法添加到该字段上,在两种情况下,该required字段均受尊重,但该dataType字段将被忽略。我也曾尝试对数据类型使用“字符串”,“字符串”和“
java.lang.String”,但这些都不起作用。

我是否缺少某些东西,或者这仅仅是swagger-spring-mvc库中的错误?


问题答案:

事实证明,dataType在当前版本的Swagger Spring MVC库中,这完全被忽略了。我在这里找到了简短的讨论:

https://github.com/springfox/springfox/issues/602

看起来一旦发布就可以将其包含在版本2中。

编辑:尽管版本2表示它支持dataType,但目前似乎无法正常工作。满足我需求的更好方法是使用直接模型替换来配置文档设置,如下所示:

@Bean
public Docket swaggerSpringMvcPlugin() {
    return new Docket(DocumentationType.SWAGGER_2)
            .directModelSubstitute(Money.class, String.class);
}