1

我们使用 Swagger 2.x 和 SpringFox 2.0 来记录我们使用 Spring MVC 创建的 REST 服务。

我们有一个带有属性 List<LocalDate> 日期的 REST 响应。

在响应的模型架构中,日期标签显示为“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"
}

在模型架构中,我希望将 LocalDate 设为“日期”或“yyyy-MM-dd”。执行此操作的方法似乎是使用 com.wordnik.swagger.annotations.ApiModelProperty 但这没有任何效果(它正在被拾取,因为当我添加 @ApiModelProperty(hidden=true) 它是隐藏的)。

我创建了一个显示问题的示例休息项目。

任何想法如何在 Swagger 的模型架构中将 LocalDate 更改为“日期”或“yyyy-MM-dd”?

4

2 回答 2

0

Docket 对象中有一个方法可以替换模型,称为 directModelSubstitute()。您可以像这样使用它将 LocalDate 替换为 Date 对象:

Docket#directModelSubstitute(LocalDate.class, Date.class)

我发现的唯一问题是您无法更改日期格式。

请参阅Springfox 官方文档中的 A/Q 部分,特别是问题“我们如何使用 Java 8 类型,尤其是 LocalDateTime?

于 2015-09-21T16:04:55.050 回答
0

这是 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);

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

于 2019-04-10T18:19:50.650 回答