我们使用Swagger 2.x和SpringFox 2.0来记录使用Spring MVC创建的REST服务。
我们有一个REST响应,其属性为List <LocalDate>日期。
在响应的模型模式中,日期标签显示为“LocalDate”。这不是故意的:我们想要'date'或'yyyy-MM-dd'代替。
我们有这个班:
public class SayHelloResponse {
private List<LocalDate> dates;
private String message;
public SayHelloResponse(String message, LocalDate... dates) {
this.message = message;
this.dates = ImmutableList.copyOf(dates);
}
public List<LocalDate> getDates() {
return dates;
}
public String getMessage() {
return message;
}
}
这导致了这个模型架构:
{
"dates": [
"LocalDate"
],
"message": "string"
}
在Model Schema中,我想将LocalDate设为'date'或'yyyy-MM-dd'。这样做的方法似乎是使用com.wordnik.swagger.annotations.ApiModelProperty但这没有任何效果(它被拾取,因为当我添加@ApiModelProperty(hidden = true)时它被隐藏)。
我创建了一个显示问题的sample rest project。
任何想法如何在Swagger模型架构中将LocalDate更改为'date'或'yyyy-MM-dd'?
Docket对象中有一个方法可以替换名为directModelSubstitute()的模型。您可以像这样使用它来将LocalDate替换为Date对象:
Docket#directModelSubstitute(LocalDate.class, Date.class)
我找到的唯一问题是你不能改变日期格式。
请参阅A/Q section in the official Springfox documentation,特别是问题“我们如何使用Java 8类型esply。LocalDateTime?”
这在官方Springfox文档中推荐,但不起作用:
Docket(DocumentationType.SWAGGER_2)..build().directModelSubstitute(LocalDate.class, java.sql.Date.class)
此效果但将格式更改为日期 - 时间而不是日期:
Docket(DocumentationType.SWAGGER_2)..build().directModelSubstitute(LocalDate.class, java.util.Date.class);
这就是我使用最后一个并忽略时间部分的原因。