使用具有多种日期时间格式的Swagger API

时间:2018-10-29 08:36:06

标签: java swagger

我正在使用Swagger代码生成的CLI Jar版本2.3.1和java8日期库选项使用Swagger合同来使用我自己无法控制的API,语言也是Java。

API中有一些日期时间字段,均定义为:

"type": "string",
"format": "date-time"

大多数值都包含时区,但是特别是没有。因此,我们在以相同方式定义的字段中获得了这两种格式:

"1963-08-15T23:59:59+02:00"
"1963-08-15T23:59:59"

这会导致解串器出现问题,因为它永远不知道要处理哪种格式。

我在生成的DTO类中使用OffsetDateTime是因为LocalDateTime不起作用-生成的代码不包含Gson适配器(请参见https://github.com/swagger-api/swagger-codegen/issues/6992)。 / p>

我曾尝试为解串器设置格式不同的格式器,但是它不起作用,主要是因为上述第二种格式不包含区域信息:

ApiClient apiClient = new ApiClient();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss[xxx]");
apiClient.setOffsetDateTimeFormat(dtf);

我希望不要对生成的代码进行过多的编辑,因为我希望将来能够重新生成,并且我无法更改API返回的值,因为它是外部的。

是否可以告诉生成的客户端将不同格式反序列化为OffsetDateTime,或者将时区默认为特定的时间?

1 个答案:

答案 0 :(得分:0)

我通过编辑生成的JSON.java文件并更改OffsetDateTimeTypeAdapter类以在ZonedDateTime methofd的转换中使用read来解决此问题: / p>

return ZonedDateTime.parse(date, formatter).toOffsetDateTime();

然后,我已将JSON.java文件添加到.swagger-codegen-ignore文件中。我怀疑文件是否会经常更改。