복붙노트

[SPRING] 스프링 부트 잭슨에서 기본 표준 시간대를 적용하는 방법 날짜 직렬화

SPRING

스프링 부트 잭슨에서 기본 표준 시간대를 적용하는 방법 날짜 직렬화

내 봄 부팅 응용 프로그램을 ISO8601 문자열로 날짜를 직렬화하도록 구성했습니다.

spring:
  jackson:
    serialization:
      write-dates-as-timestamps: false

이것이 내가 얻는 것입니다 :

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

그러나 나의 시간대는 유럽 / 마드리드 다. 사실 TimeZone.getDefault ()를 인쇄하면 얻을 수 있습니다.

Jackson이 실제 시간대를 사용하여 datetime 값을 직렬화하도록하려면 어떻게합니까? GMT + 2

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

해결법

  1. ==============================

    1.당신은 config 클래스에 이것을 추가하여 전체 어플리케이션의 시간대를 설정할 수 있습니다 :

    당신은 config 클래스에 이것을 추가하여 전체 어플리케이션의 시간대를 설정할 수 있습니다 :

    @PostConstruct
    void started() {
        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
    }
    
  2. ==============================

    2.나는 같은 문제로 나 자신을 발견했다. 필자의 경우, 내 앱에 대해 하나의 시간대 만 있고 다음을 추가합니다.

    나는 같은 문제로 나 자신을 발견했다. 필자의 경우, 내 앱에 대해 하나의 시간대 만 있고 다음을 추가합니다.

    spring.jackson.time-zone: America/Sao_Paulo
    

    내 application.properties에서 문제가 해결되었습니다.

    출처 : https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html#JACKSON

  3. ==============================

    3.Jackson2ObjectMapperBuilderCustomizer bean 등록 해결 :

    Jackson2ObjectMapperBuilderCustomizer bean 등록 해결 :

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
        return jacksonObjectMapperBuilder -> 
            jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault());
    }
    
  4. from https://stackoverflow.com/questions/46151633/how-to-make-default-time-zone-apply-in-spring-boot-jackson-date-serialization by cc-by-sa and MIT license