如何将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);
}