SpringBoot解析LocalDateTime失?。篣niapp傳輸時間變1970的原因與解決方案
前言
最初的數(shù)據(jù)格式如下:

具體邏輯是通過前端展示給用戶看,后續(xù)將其數(shù)值帶到后端,進行添加,最后以LocalDateTime格式
但發(fā)現(xiàn)數(shù)據(jù)一直都是1970:

1. 問題分析
在 Uniapp 前端傳輸 yyyy-MM-dd HH:mm:ss 格式的時間到 Spring Boot 后端時,默認 LocalDateTime 解析失敗,導致變成 1970-01-01 08:00:00
問題分析:為什么時間變成 1970?
1.1 Uniapp 傳輸?shù)臅r間
前端 dayjs 處理時間:inGatTime: dayjs(this.itemData.inGatTime).format('YYYY-MM-DD HH:mm:ss'),
傳輸?shù)胶蠖说?JSON:
{
"inGatTime": "2025-03-09 19:10:05"
}
這是一個 字符串,而不是 LocalDateTime!
1.2 Spring Boot 默認的 LocalDateTime 解析
如果后端 LocalDateTime 僅僅加了 @JsonFormat 和 @DateTimeFormat:
@Schema(description = "時間") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime inGatTime;
問題:
- @JsonFormat 僅用于序列化(返回數(shù)據(jù)給前端),不會影響 反序列化(接收前端傳輸?shù)臄?shù)據(jù))
- @DateTimeFormat 只對 Spring MVC 的 URL 參數(shù)解析 有效,對 @RequestBody 傳輸?shù)?JSON 無效
結果是,Spring Boot 無法正確解析 yyyy-MM-dd HH:mm:ss,導致 LocalDateTime 變成 1970-01-01 08:00:00(默認 UNIX 時間戳起點)
但是,加上 @JsonDeserialize(using = LocalDateTimeDeserializer.class) 和 @JsonSerialize(using = LocalDateTimeSerializer.class) 之后,Spring Boot 才能正確解析時間
為什么???
2. 使用 @JsonDeserialize & @JsonSerialize(推薦)
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import java.time.LocalDateTime; @Schema(description = "進閘時間") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @JsonDeserialize(using = LocalDateTimeDeserializer.class) // 反序列化 @JsonSerialize(using = LocalDateTimeSerializer.class) // 序列化 private LocalDateTime inGatTime;
- @JsonDeserialize(using = LocalDateTimeDeserializer.class)
告訴 Jackson 解析 yyyy-MM-dd HH:mm:ss 格式的字符串為 LocalDateTime - @JsonSerialize(using = LocalDateTimeSerializer.class)
讓 LocalDateTime 按 yyyy-MM-dd HH:mm:ss 格式返回 JSON
這個方案最穩(wěn)定,推薦使用!
3. 前端傳 ISO-8601 格式(不推薦,可嘗試)
spring Boot 默認支持 ISO-8601 格式(YYYY-MM-DDTHH:mm:ss),前端這樣修改:
inGatTime: dayjs(this.itemData.inGatTime).format('YYYY-MM-DDTHH:mm:ss'),
傳輸數(shù)據(jù):
{
"inGatTime": "2025-03-09T19:10:05"
}
后端 LocalDateTime 可以直接解析:
@Schema(description = "進閘時間") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private LocalDateTime inGatTime;
但這樣 LocalDateTime 變成 T 分隔格式,前端接收時要自己處理!
但 我的后端保存到數(shù)據(jù)還是1970!
4. 用 String(中立)
這個要改字段類型,保持中立,看自身代碼好不好修改!
如果 Jackson 解析仍然失敗,可以 先用 String 接收,再手動轉換 LocalDateTime:
@Schema(description = "進閘時間") private String inGatTime; // 先接收為字符串
然后在 Service 里轉換:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime parsedTime = LocalDateTime.parse(createReqVO.getInGatTime(), formatter);
適用于 Jackson 反序列化無效的情況!
以上就是SpringBoot解析LocalDateTime失敗?Uniapp傳輸時間變1970的原因與解決方案的詳細內容,更多關于SpringBoot解析LocalDateTime失敗的資料請關注腳本之家其它相關文章!
相關文章
Spring Boot 3 整合 RustFS 實現(xiàn)分布式文件存儲的常
本文詳解SpringBoot3與RustFS分布式存儲系統(tǒng)的整合方法,涵蓋環(huán)境部署、配置、核心代碼實現(xiàn)及高級功能擴展,最終構建高性能、可擴展的文件存儲服務,強調其兼容S3協(xié)議、開源特性及成本優(yōu)勢,感興趣的朋友跟隨小編一起看看吧2025-09-09
如何讀取properties或yml文件數(shù)據(jù)并匹配
這篇文章主要介紹了如何讀取properties或yml文件數(shù)據(jù)并匹配方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
SpringBoot整合PowerJob實現(xiàn)定時任務調度
最近項目需要使用定時任務,而使用了PowerJob做任務調度模塊,感覺這個框架真香,今天我們就來深入了解一下新一代的定時任務框架——PowerJob,需要的朋友可以參考下2024-03-03
SpringBoot編譯target目錄下沒有resource下的文件踩坑記錄
這篇文章主要介紹了SpringBoot編譯target目錄下沒有resource下的文件踩坑記錄,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
SpringBoot集成FastDFS+Nginx整合基于Token的防盜鏈的方法
這篇文章主要介紹了SpringBoot集成FastDFS+Nginx整合基于Token的防盜鏈的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04
SpringBoot集成Swagger使用SpringSecurity控制訪問權限問題
這篇文章主要介紹了SpringBoot集成Swagger使用SpringSecurity控制訪問權限問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
spring?boot?導出數(shù)據(jù)到excel的操作步驟(demo)
這篇文章主要介紹了spring?boot?導出數(shù)據(jù)到excel的實現(xiàn)步驟,文中通過打開一個平時練習使用的springboot的demo給大家詳細介紹,需要的朋友可以參考下2022-03-03

