jacksonspring-bootjsr310

Can't serialize java.time.LocalDate as a String with Jackson


I am using spring-boot 1.2.1.RELEASE with jackson 2.6.2 including the jsr310 datatype. I am using the annotation @SpringBootApplication to kick off my Spring app. I have

spring.jackson.serialization.write_dates_as_timestamps = false

set in my application.properties (which I know is being read because I tested with banner = false).

And yet java.time.LocalDate is still being serialized as an array of integers. I am not using @EnableWebMvc.

It looks like if I add the tag

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")

to my LocalDate variable then it works. But I thought it was automatic with the above property set. Plus, if I remember right (I've since just decided to work with the integer array), that only worked with serialization and not deserialization (but I can't honestly quite remember if that last part is true).


Solution

  • This is know issue in Spring Boot. You need to do it manually.

    objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    

    or update to 1.2.2.

    UPDATE: Also there is a way to configure ObjectMapper used by spring from your container.