Swagger Model Schema Response:SpringFox 中 LocalDate 的替代标签



我们使用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);

这就是为什么我使用最后一个并忽略时间部分的原因。

最新更新