最近,有個小夥伴問我:我在SpringBoot項目中,使用@JsonFormat註解標註LocalDateTime類型的字段時,LocalDateTime反序列化失敗,這個我該怎麼處理呢?別急,咱們一塊兒來解決這個問題。前端
咱們能夠使用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及以上。spring
2.若是不升級SpringBoot版本,能夠按照下面的方式解決問題。json
不升級SpringBoot版本,添加Jackson對Java Time的支持後,就能解決這個問題。bash
在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,自動掃描新添加的模塊:app
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,後續我都會持續更新和維護,感謝你們長期以來對冰河的支持!!