我正在使用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"
}
但是,swagger文档并没有遵守dataType =“java.lang.String”。它将响应模型显示为:
"CartItem": {
"description": "",
"id": "CartItem",
"properties": {
"listPrice": {
"required": false,
"type": "Money"
}
}
}
我尝试在字段和方法上放置@ApiModelProperty注释,在这两种情况下都会尊重required
字段,但会忽略dataType
字段。我也尝试使用“String”,“string”和“java.lang.String”作为dataType,但没有一个有效。
我错过了什么,或者这只是swagger-spring-mvc库中的一个错误?
答案 0 :(得分:8)
事实证明,在当前版本的Swagger Spring MVC库中完全忽略了dataType
。我在这里找到了一个简短的讨论:
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);
}
答案 1 :(得分:1)
对于OpenApi(Swagger 3.0)和SpringDoc,可以使用以下全局配置。
static {
SpringDocUtils.getConfig().replaceWithSchema(Money.class, new StringSchema());
}
答案 2 :(得分:-2)
GetHTTP