摇摆日期字段与日期时间字段

我正在使用swagger来测试我的休息api,我的实体类的属性之一是一个日期字段,我需要以yy-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.尝试按照此代码(覆盖OveroverConvertor类)但找不到swagger-core 1.3版本mvn存储库。仅可用的是1.5版本 https://github.com/swagger-api/swagger-core/wiki/overriding-models

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

请帮忙。


答案 1

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

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

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

2) 使用 java8 的 ,同上。LocalDate

3) 告诉 swagger 在检测注释中的类型时使用上述任一方法,但将属性保留为类型:java.util.Date

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

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


答案 2

我的队友已经找到了修复程序。我们需要将springfox版本升级到2.3.0 ,以前我们使用的是springfox 2.2.2版本。在那个旧版本中,swagger的@ApiModelPreporty具有称为“示例”的属性,它没有做任何事情。从版本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


推荐