大摇大摆的日期字段与日期时间字段
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.String
或int
,而不是“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 文件中的依赖项是:以上是关于大摇大摆的日期字段与日期时间字段的主要内容,如果未能解决你的问题,请参考以下文章