web-dev-qa-db-fra.com

Format de date de Jackson pour OffsetDateTime dans Spring Boot

J'essaie de générer un OffsetDateTime à partir de mon application Spring et j'ai dans mon application.properties les propriétés suivantes:

spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
spring.jackson.date-format=yyyy-MM-dd'T'HH:mm

Cependant, lorsque la date est renvoyée, elle est formatée comme suit: 

"2017-01-30T16:55:00Z"

Comment dois-je configurer correctement le format de la date dans mon application Spring?

10
Dave

J'ai donc réussi à trouver une solution, mais si vous avez une alternative, postez-la.

J'ai fini par créer un nouveau bean primaire ObjectMapper et enregistrer un nouveau module avec un sérialiseur personnalisé pour OffsetDateTime. Je peux définir mon propre format de date ici, en utilisant Java.time.format.DateTimeFormatter. Je devais aussi enregistrer la JavaTimeModule avec mon mappeur.

@Configuration
public class JacksonOffsetDateTimeMapper{

    @Primary
    @Bean
    public ObjectMapper objectMapper() {

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new JavaTimeModule());
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(OffsetDateTime.class, new JsonSerializer<OffsetDateTime>() {
            @Override
            public void serialize(OffsetDateTime offsetDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
                jsonGenerator.writeString(DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(offsetDateTime));
            }
        });
        objectMapper.registerModule(simpleModule);

        return objectMapper;
    }

}
8
Dave
  1. Ajoutez jackson-datatype-jsr310 à vos dépendances
  2. Ajouter à application.properties:

    spring.jackson.serialization.write-dates-as-timestamps=false
    

Tu auras:

"lastUpdated": "2017-07-16T19:17:57.689Z"
2
Konstantin Pavlov

Avez-vous essayé de mettre @JsonFormat(pattern="dd/MM/yyyy HH:mm:ss Z") avant votre terrain?

@JsonProperty("timestamp")
@JsonFormat(pattern="yyyy-MM-dd'T'HH:mm")
private OffsetDateTime timestamp;

Je suppose que vous obtiendrez:

2017-01-30'T'16:55
0
WesternGun