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

时间:2016-01-11 16:09:37

标签: java swagger swagger-ui springfox swagger-maven-plugin

我使用swagger来测试我的其余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”但我需要将其作为“日期”:“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. 显然,从1.5版本开始,他们删除了OverrideConvertor类 https://groups.google.com/forum/#!topic/swagger-swaggersocket/ChiknyHZiP4
  2. 请帮忙。

2 个答案:

答案 0 :(得分:7)

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

您有三种方法可以正确处理日期类型。

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

2)使用java8' s LocalDate,与上面相同。

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

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

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

答案 1 :(得分:7)

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