Я использую API, который находится вне моего контроля, с контрактом Swagger с использованием CLAR Jar Swagger версии 2.3.1 и с опцией библиотеки дат java8
, язык также Java.
В API есть несколько полей даты и времени, которые все определены как:
"type": "string",
"format": "date-time"
Большинство значений включают в себя часовой пояс, однако, в частности, нет. Таким образом, мы получаем оба этих формата в полях, которые определены одинаково:
"1963-08-15T23:59:59+02:00"
"1963-08-15T23:59:59"
Это вызывает проблемы с десериализатором, поскольку он никогда не знает, какой формат обрабатывать.
Я использую OffsetDateTime
в сгенерированных классах DTO, так как 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
или, возможно, по умолчанию для часового пояса установлено что-то конкретное?