我们使用Swagger 2.x和SpringFox 2.0来记录我们使用Spring MVC创建的REST服务。
我们有一个 REST 响应,其中包含属性列表<本地日期>日期。本地日期>
在响应的模型架构中,日期的标签显示为"本地日期"。这不是故意的:我们希望使用"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"
}
在模型架构中,我希望将 LocalDate 作为"日期"或"yyyy-MM-dd"。执行此操作的方法似乎是使用com.wordnik.swagger.annotations.ApiModelProperty,但这没有任何影响(它正在被拾取,因为当我添加@ApiModelProperty(hidden=true)时它是隐藏的)。
我创建了一个示例 rest 项目来显示该问题。
任何想法如何在 Swagger 的模型模式中将 LocalDate 更改为"日期"或"yyyy-MM-dd"?
Docket 对象中有一种方法可以替换模型,称为 directModelSubstitute()。你可以像这样使用它来替换 LocalDate to Date 对象:
Docket#directModelSubstitute(LocalDate.class, Date.class)
我发现它的唯一问题是您无法更改日期格式。
请参阅官方 Springfox 文档中的 A/Q 部分,特别是"我们如何使用 Java 8 类型。本地日期时间?
在官方 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);
这就是为什么我使用最后一个并忽略时间部分的原因。