我正在使用swagger测试我的其余api,我的实体类的属性之一是日期字段,我需要yyyy-mm-dd格式的日期,但swagger模型架构将此字段显示为日期时间而不是日期字段,因此它给出了时间和区域的日期.如何将此日期时间转换为日期字段?
我有一个java实体类TimeEntry.java,它的一个属性是Date,它看起来像这样.
@ApiModelProperty(required = true) @JsonFormat(pattern = DATE_FORMAT) private Date date;
对于此字段,在swagger UI模型架构上,字段日期显示为"日期":"2016-01-08T22:34:22.337Z"但我需要将其作为"日期":"2016-01-08".
我尝试过以下方法:
1.
@ApiModelProperty(required = true, dataType="date") @JsonFormat(pattern = DATE_FORMAT) private Date date;
2.Tried跟随这段代码(覆盖OverrideConvertor类)但找不到swagger-core 1.3版本的mvn repo.仅提供1.5版本https://github.com/swagger-api/swagger-core/wiki/overriding-models
显然,从1.5版本开始,他们删除了OverrideConvertor类 https://groups.google.com/forum/#!topic/swagger-swaggersocket/ChiknyHZiP4
请帮忙.
问题(实际上存在的问题之一)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
格式化字符串.
我的队友找到了解决办法.我们需要将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