Spring Boot LocalDate field serialization and deserialization

前端 未结 4 1374
孤独总比滥情好
孤独总比滥情好 2020-12-17 01:37

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:

相关标签:
4条回答
  • 2020-12-17 02:10

    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 ModelAttributes 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'
    
    0 讨论(0)
  • 2020-12-17 02:13

    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;*
    
    0 讨论(0)
  • 2020-12-17 02:25
    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".

    0 讨论(0)
  • 2020-12-17 02:25

    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.

    0 讨论(0)
提交回复
热议问题