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

Posted

技术标签:

【中文标题】大摇大摆的日期字段与日期时间字段【英文标题】:swagger date field vs date-time field 【发布时间】:2016-04-16 00:44:06 【问题描述】:

我正在使用 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.5 版本中删除了 OverrideConvertor 类 https://groups.google.com/forum/#!topic/swagger-swaggersocket/ChiknyHZiP4

请帮忙。

【问题讨论】:

从javadocs 看,我相信dataType 是java 类型,如java.lang.Stringint,而不是“swagger 类型”。 @ApiModelProperty 是大摇大摆的注解,这个注解有一个方法 dataType,它采用我们需要的类型的类的完全限定路径,在本例中是 org.joda.time.LocalDate。在答案部分说同样的。在此处检查覆盖属性数据类型第 5.3 节:springfox.github.io/springfox/docs/snapshot/… 【参考方案1】:

我的队友找到了解决办法。我们需要将 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

【讨论】:

Tnx ,@ApiModelProperty 帮助了我。【参考方案2】:

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

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

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

2) 使用java8的LocalDate,同上。

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

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

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

【讨论】:

非常感谢您回答我的问题。我尝试了上述所有选项,但我在 swagger 上获得的日期字段格式(对于所有三个选项)是这样的。 “日期”:“年表”:“日历类型”:“字符串”,“id”:“字符串”,“dayOfMonth”:0,“dayOfWeek”:“MONDAY”,“dayOfYear”:0,“时代” : "value": 0 , "leapYear": true, "month": "JANUARY", "monthValue": 0, "year": 0 您能确认一下您正在使用的 swagger-core 版本吗? 1.5.6 是最新的。 我们使用的是 swagger-core 1.5.3 版本,另外我应该提到我们使用的是 springfox-swager2 依赖项。我的 pom 文件中的依赖项是: io.springfoxspringfox-swagger2$spring.fox.version Springfox 使用核心的 swagger 注释,我建议你在他们的存储库中打开一个问题以查看它们是否更新到 1.5.6,并可能针对这种情况添加测试。

以上是关于大摇大摆的日期字段与日期时间字段的主要内容,如果未能解决你的问题,请参考以下文章

SQL中哪个字段类别记录日期和哪个字段类别记录时间

当前日期与特定日期相同时如何自动更新字段

SQL语句问题(关于日期加减与字段加减)

SQL Server,HQL:如何将 SQL Server 日期时间列字段与日期进行比较

如何比较 Postgresql 中日期时间字段中的日期?

如何将一个字段中的日期与另一字段中的时间结合起来 - MS SQL Server