1. 程式人生 > >為啥你用@JsonFormat註解時,LocalDateTime會反序列化失敗?

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

## 寫在前面 > 最近,有個小夥伴問我:我在SpringBoot專案中,使用@JsonFormat註解標註LocalDateTime型別的欄位時,LocalDateTime反序列化失敗,這個我該怎麼處理呢?別急,我們一起來解決這個問題。 ## 小夥伴的疑問 ![](https://img-blog.csdnimg.cn/20200929202817877.jpg) ## 解答小夥伴的疑問 我們可以使用SpringBoot依賴中的@JsonFormat註解,將前端通過json傳上來的時間,通過@RequestBody自動繫結到Bean裡的LocalDateTime成員上。具體的繫結註解使用方法如下所示。 ```java @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中新增: ```xml ``` 新增JavaConfig,自動掃描新新增的模組: ```java 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新增如下配置: ```bash spring.jackson.serialization.write-dates-as-timestamps=false ``` 或者只註冊JavaTimeModule,新增下面的Bean ```java @Bean public ObjectMapper serializingObjectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); objectMapper.registerModule(new JavaTimeModule()); return objectMapper; } ``` ## 重磅福利 微信搜一搜【冰河技術】微信公眾號,關注這個有深度的程式設計師,每天閱讀超硬核技術乾貨,公眾號內回覆【PDF】有我準備的一線大廠面試資料和我原創的超硬核PDF技術文件,以及我為大家精心準備的多套簡歷模板(不斷更新中),希望大家都能找到心儀的工作,學習是一條時而鬱鬱寡歡,時而開懷大笑的路,加油。如果你通過努力成功進入到了心儀的公司,一定不要懈怠放鬆,職場成長和新技術學習一樣,不進則退。如果有幸我們江湖再見! 另外,我開源的各個PDF,後續我都會持續更新和維護,感謝大家長期以來對冰河的支