17

我正在使用 swagger 来测试我的 rest api,我的实体类的属性之一是一个日期字段,我需要 yyyy-mm-dd 格式的日期,但是 swagger 模型架构将此字段显示为日期时间而不是日期字段,因此它提供带有时间和区域的日期。如何将此日期时间转换为日期字段?

我有一个 java 实体类 TimeEntry.java,它的属性之一是 Date,它看起来像这样。

@ApiModelProperty(required = true)
@JsonFormat(pattern = DATE_FORMAT)
private Date date;

对于此字段,在 swagger UI 模型架构上,字段日期显示为 "date": "2016-01-08T22:34:22.337Z" 但我需要将其作为 "date":"2016-01-08" 。

我尝试了以下方法:

1.

@ApiModelProperty(required = true, dataType="date")  
@JsonFormat(pattern = DATE_FORMAT)   
private Date date;

2.尝试遵循此代码(覆盖 OverrideConvertor 类),但找不到 swagger-core 1.3 版本 mvn 存储库。仅提供 1.5 版本https://github.com/swagger-api/swagger-core/wiki/overriding-models

  1. 显然,他们从 1.5 版本中删除了 OverrideConvertor 类 https://groups.google.com/forum/#!topic/swagger-swaggersocket/ChiknyHZiP4

请帮忙。

4

2 回答 2

14

问题(实际上是问题之一)java.util.Date是它实际上是一个日期时间,并且 swagger 正确地检测到它。我确实知道这@JsonFormat也是一种解决方法——swagger 在类型检测期间不支持该注释。

您有三个选项可以正确处理日期类型。

1) 使用 JodaLocalDate作为数据类型。如果您声明private LocalDate date,它将正确显示。

2)使用java8的LocalDate,同上。

3) 告诉 swagger 在检测注解中的类型时使用上述任何一种,但保持属性为 type java.util.Date

@ApiModelProperty(required = true, dataType = "org.joda.time.LocalDate")

然后,在扫描时,swagger 会将其检测为date格式化字符串。

于 2016-01-12T17:50:56.843 回答
13

我的队友找到了解决办法。我们需要将 springfox 版本升级到 2.3.0 ,之前我们使用的是 springfox 2.2.2 版本。在那个旧版本中,swagger 的 @ApiModelPreporty 有一个名为“example”的属性,它没有做任何事情。从 2.3.0 版本开始,这个“示例”开始工作。所以在我们将 springfox 版本升级到 2.3.0 之后,我们所要做的就是如下所示。

@ApiModelProperty(required = true,example = "2016-01-01")
@JsonFormat(pattern = DATE_FORMAT)
private LocalDate date; 

以下是我们找到此信息的链接:

https://github.com/springfox/springfox/issues/998

于 2016-01-25T20:59:47.677 回答