На основе этого Java Date Time - OffsetDateTime.format () Примеры статьи и этой официальной документации для DateTimeFormatter Я ожидаю, что мой OffsetDateTime будет сериализован как 2011-12-03T10:15:30+00:00
, где смещение смещение составляет +00:00
с момента его UTC.
Мне не удается получить OffsetDateTime для рендеринга со смещением, он всегда рендерится с Z-Zulu. Что я делаю не так?
![enter image description here](https://i.stack.imgur.com/4UnuO.png)
Это Spring Boot 2.0.0.RELEASE , и, как вы можете видеть на скриншоте, у меня есть следующие модули на пути к классам и они зарегистрированы в objectMapper, хотя я не думаю, что это относительно, потому что эта проблема, кажется, напрямую связана с DateTimeFormatter, мой объектный преобразователь просто использует форматер, который я даю.
Это оказывает влияние, потому что, как вы можете видеть на втором скриншоте, когда я указываю BASIC_ISO_FORMAT
, оно дает другой результат.
У меня есть это свойство, установленное spring.jackson.date-format= com.fasterxml.jackson.databind.util.ISO8601DateFormat
в моем application.properties, но, насколько я понимаю, это не влияет на OffsetDateTime, оно поддерживает только устаревшие объекты Date из предыдущей версии java. Случайно изменение этого, кажется, не имеет никакого эффекта, как ожидалось.
Любая помощь будет оценена.
Использование формата ISO_ZONED_DATE_TIME ...
![Using ISO_ZONED_DATE_TIME format](https://i.stack.imgur.com/FsAlG.png)
Использование BASIC_ISO_FORMAT ... это действительно влияет, так что я знаю, что форматировщик что-то делает, я просто не понимаю, почему ISO_ZONED_DATE_TIME не отображается должным образом.
![Using BASIC_ISO_FORMAT](https://i.stack.imgur.com/sgvwZ.png)
this.objectMapper = objectMapperBuilder.build()
.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE)
.disable(SerializationFeature.INDENT_OUTPUT)
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.disable(SerializationFeature.WRITE_DATES_WITH_ZONE_ID);
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(OffsetDateTime.class, new JsonSerializer<OffsetDateTime>() {
@Override
public void serialize(OffsetDateTime offsetDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
String formattedDate = DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(offsetDateTime);
jsonGenerator.writeString(formattedDate);
}
});
this.objectMapper.registerModule(simpleModule);
OffsetDateTime now = OffsetDateTime.now();
TimeZone defaultTimeZone = TimeZone.getDefault();
ZoneId defautlZoneOffset = ZoneOffset.systemDefault();
String serializedOffsetDateTime = this.objectMapper.writeValueAsString(now);
//returns -> "2018-06-27T11:45:56.035Z"