【发布时间】:2018-10-29 08:36:06
【问题描述】:
我正在使用 Swagger 合同使用我无法控制的 API,使用 Swagger 代码生成 CLI Jar 版本 2.3.1 并使用 java8 日期库选项,语言也是 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)。
我曾尝试为反序列化器设置不同格式的格式化程序,但不起作用,主要是因为上面的第二种格式排除了区域信息:
ApiClient apiClient = new ApiClient();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss[xxx]");
apiClient.setOffsetDateTimeFormat(dtf);
我希望不要过多地编辑生成的代码,因为我希望将来能够重新生成,并且我无法更改 API 返回的值,因为它是外部的。
有没有办法告诉生成的客户端将不同的格式反序列化为OffsetDateTime,或者将时区默认为特定的?
【问题讨论】: