web-dev-qa-db-ja.com

Spring Boot Jackson Dateシリアル化でデフォルトのタイムゾーンを適用する方法

日付をISO8601文字列としてシリアル化するようにSpring Bootアプリケーションを構成しました。

_spring:
  jackson:
    serialization:
      write-dates-as-timestamps: false
_

これは私が得ているものです:

_"someDate": "2017-09-11T07:53:27.000+0000"
_

ただし、私のタイムゾーンはヨーロッパ/マドリードです。実際、TimeZone.getDefault()を出力すると、それが得られます。

実際のタイムゾーンを使用してこれらの日時値をジャクソンにシリアル化するにはどうすればよいですか? GMT + 2

_"someDate": "2017-09-11T09:53:27.000+0200"
_
17
codependent

Jackson2ObjectMapperBuilderCustomizer Beanの登録を解決しました:

@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
    return jacksonObjectMapperBuilder -> 
        jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault());
}
17
codependent

これを設定クラスに追加して、アプリケーション全体のタイムゾーンを設定できます。

@PostConstruct
void started() {
    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}
22
barbakini

私は同じ問題を抱えていました。私の場合、アプリのタイムゾーンは1つだけで、次のように追加します:

spring.jackson.time-zone: America/Sao_Paulo

私のapplication.properties 問題を解決しました。

ソース: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html#JACKSON

21
Jaumzera