web-dev-qa-db-fra.com

Comment appliquer le fuseau horaire par défaut à la sérialisation de date Spring Boot Jackson

J'ai configuré mon application Spring Boot pour sérialiser les dates sous forme de chaînes ISO8601:

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

Voici ce que je reçois:

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

Cependant, mon fuseau horaire est Europe/Madrid. En fait, si j’imprime TimeZone.getDefault(), c’est ce que je reçois.

Comment puis-je obliger Jackson à sérialiser ces valeurs de date/heure en utilisant le fuseau horaire réel? GMT + 2

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

Résolution de l'enregistrement d'un bean Jackson2ObjectMapperBuilderCustomizer:

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

Vous pouvez définir un fuseau horaire pour toute l'application en ajoutant ceci à une classe de configuration:

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

Je me suis retrouvé avec le même problème. Dans mon cas, je n'ai qu'un fuseau horaire pour mon application, puis j'ajoute:

spring.jackson.time-zone: America/Sao_Paulo

dans mon application.properties résolu le problème.

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

21
Jaumzera