如何为Swagger文档将@ApiModelProperty dataType设置为String

ner*_*erd 12 java spring spring-mvc swagger

我正在使用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;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

{
    "listPrice": "USD 10.50"
}
Run Code Online (Sandbox Code Playgroud)

但是,swagger文档并没有遵守dataType ="java.lang.String".它将响应模型显示为:

"CartItem": {
    "description": "",
    "id": "CartItem",
    "properties": {
        "listPrice": {
            "required": false,
            "type": "Money"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试将@ApiModelProperty注释放在字段和方法上,并且在这两种情况下都遵循该required字段,但是该dataType字段被忽略.我也尝试使用"String","string"和"java.lang.String"作为dataType,但没有一个有效.

我错过了什么,或者这只是swagger-spring-mvc库中的一个错误?

ner*_*erd 10

事实证明,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);
}
Run Code Online (Sandbox Code Playgroud)

  • 你是正确的,它现在支持2.0.x(在2.0.0-SNAPSHOT中可用),但有一些注意事项.数据类型必须是有效的包限定类. (3认同)