為啥你用@JsonFormat註解時,LocalDateTime會反序列化失敗?

寫在前面

最近,有個小夥伴問我:我在SpringBoot項目中,使用@JsonFormat註解標註LocalDateTime類型的字段時,LocalDateTime反序列化失敗,這個我該怎麼處理呢?別急,我們一起來解決這個問題。

小夥伴的疑問

解答小夥伴的疑問

我們可以使用SpringBoot依賴中的@JsonFormat註解,將前端通過json傳上來的時間,通過@RequestBody自動綁定到Bean里的LocalDateTime成員上。具體的綁定註解使用方法如下所示。

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", locale = "zh", timezone = "GMT+8")

出現問題的版本

我使用Spring Boot 2.0.0 時,直接在字段上加上@JsonFormat 註解就可以完成數據的綁定。

而在使用Spring Boot 1.5.8時,只在字段上加上@JsonFormat 註解,在數據綁定時無法將Date類型的數據自動轉化為字符串類型的數據。

解決方法

1.將SpringBoot版本升級為2.0.0及以上。

2.如果不升級SpringBoot版本,可以按照下面的方式解決問題。

不升級SpringBoot版本,添加Jackson對Java Time的支持後,就能解決這個問題。

在pom.xml中添加:

<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-parameter-names</artifactId>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jdk8</artifactId>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

添加JavaConfig,自動掃描新添加的模塊:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
import com.fasterxml.jackson.databind.ObjectMapper;
 
@Configuration
public class JacksonConfig {
 
    @Bean
    public ObjectMapper serializingObjectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.findAndRegisterModules();
        return objectMapper;
    }
}

或者在application.properties添加如下配置:

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

或者只註冊JavaTimeModule,添加下面的Bean

@Bean
public ObjectMapper serializingObjectMapper() {
  ObjectMapper objectMapper = new ObjectMapper();
  objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
  objectMapper.registerModule(new JavaTimeModule());
  return objectMapper;
}

重磅福利

微信搜一搜【冰河技術】微信公眾號,關注這個有深度的程序員,每天閱讀超硬核技術乾貨,公眾號內回復【PDF】有我準備的一線大廠面試資料和我原創的超硬核PDF技術文檔,以及我為大家精心準備的多套簡歷模板(不斷更新中),希望大家都能找到心儀的工作,學習是一條時而鬱鬱寡歡,時而開懷大笑的路,加油。如果你通過努力成功進入到了心儀的公司,一定不要懈怠放鬆,職場成長和新技術學習一樣,不進則退。如果有幸我們江湖再見!

另外,我開源的各個PDF,後續我都會持續更新和維護,感謝大家長期以來對冰河的支持!!

Tags: