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"
Résolution de l'enregistrement d'un bean Jackson2ObjectMapperBuilderCustomizer:
@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
return jacksonObjectMapperBuilder ->
jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault());
}
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"));
}
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.