我正在使用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
,或者将时区默认为特定的时间?
答案 0 :(得分:0)
我通过编辑生成的JSON.java
文件并更改OffsetDateTimeTypeAdapter
类以在ZonedDateTime
methofd的转换中使用read
来解决此问题: / p>
return ZonedDateTime.parse(date, formatter).toOffsetDateTime();
然后,我已将JSON.java
文件添加到.swagger-codegen-ignore
文件中。我怀疑文件是否会经常更改。