Джексон: часовой пояс отличается от системного часового пояса по умолчанию? - PullRequest
0 голосов
/ 21 января 2019

У меня есть этот код:

Date timestamp = new Date();

LOG.info("timestamp timezone: " + Integer.toString(timestamp.getTimezoneOffset()));

MetadataFields metadataFields;
metadataFields = this.objectMapper.readValue(this.value, MetadataFields.class);

LOG.info("fields timezone: " + Integer.toString(metadataFields.getDataSolicitudGSIT().getTimezoneOffset()));

Я получаю эти журналы:

timestamp timezone: -60
fields timezone: -120

Кажется, ObjectMapper использует другой часовой пояс системы по умолчанию.

Есть идеи?

1 Ответ

0 голосов
/ 21 января 2019

Если вы проверите исходный код для DateTimeDeserializer показывает, что он использует часовой пояс из DeserializationContext, который предоставляется ObjectMapper во время десериализации. Если вы посмотрите на ObjectMapper .

public ObjectMapper setTimeZone(TimeZone tz)

Таким образом, этот метод позволяет настроить ObjectMapper и установить часовой пояс на правильный.

Вы можете установить это явно здесь:

protected final static BaseSettings DEFAULT_BASE = new BaseSettings(
    ...
    TimeZone.getTimeZone("GMT"),
    ...

Так что лучший выбор - это установить самостоятельно, используя ObjectMapper.setTimeZone(TimeZone tz).

...