On spring boot 1.2.3.RELEASE with fasterxml what is the correct way of serializing and de-serializing a LocalDate field to iso date formatted string?
I\'ve tried:
In my Spring Boot 2 applications
@JsonFormat
annotation is used in REST controllers when (de)serializing JSON data. @DateTimeFormat
annotation is used in other controllers ModelAttribute
s when (de)serializing String data. You can specify both on the same field (useful if you share DTO between JSON and Thymeleaf templates):
@JsonFormat(pattern = "dd/MM/yyyy")
@DateTimeFormat(pattern = "dd/MM/yyyy")
private LocalDate birthdate;
Gradle dependency:
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-json'
I hope this is all configuration you need for custom Date/Time formatting in Spring Boot 2.x apps.
For Spring Boot 1.x apps, specify additional annotations and dependency:
@JsonFormat(pattern = "dd/MM/yyyy")
@DateTimeFormat(pattern = "dd/MM/yyyy")
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate birthDate;
// or
@JsonFormat(pattern = "dd/MM/yyyy HH:mm")
@DateTimeFormat(pattern = "dd/MM/yyyy HH:mm")
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
private LocalDateTime birthDateTime;
implementation group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.9.8'
If you want to use a custom Java Date formatter, add the @JsonFormat
annotation.
@JsonFormat(pattern = "dd/MM/yyyy")
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate birthdate;*
compile ("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
in build.gradle and then following annotations helped:
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate birthday;
Update: if you are using Spring Boot 2.*, the dependency is already included via one of the "starters".
Actually, it works if you just specify the dependency in the pom.xml.
With this, all my LocalDate fields automatically use the ISO format, no need to annotate them:
<!-- This is enough for LocalDate to be deserialized using ISO format -->
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
Tested on Spring Boot 1.5.7.