前后端時(shí)間數(shù)據(jù)類(lèi)型不一致的解決方案
前端開(kāi)發(fā)中,常常遇到后端返回的時(shí)間數(shù)據(jù)與前端類(lèi)型不符的情況,導(dǎo)致無(wú)法直接處理時(shí)間數(shù)據(jù)。本文針對(duì) typescript 前端接收 Java 后端 timestamp 類(lèi)型時(shí)間數(shù)據(jù),最終得到字符串的問(wèn)題,提供詳細(xì)的解決方案。
問(wèn)題:
核心問(wèn)題在于前后端時(shí)間數(shù)據(jù)類(lèi)型不匹配。后端 Java 應(yīng)用使用 DATETIME 數(shù)據(jù)庫(kù)字段和 Timestamp 類(lèi)型實(shí)體類(lèi)存儲(chǔ)時(shí)間,前端 TypeScript 將 createTime 和 updateTime 定義為 number 類(lèi)型(時(shí)間戳)。然而,前端實(shí)際接收到的 createTime 卻是字符串,無(wú)法直接進(jìn)行時(shí)間處理。本文也探討如何讓后端直接返回時(shí)間戳。
立即學(xué)習(xí)“Java免費(fèi)學(xué)習(xí)筆記(深入)”;
分析與解決方案:
TypeScript 的 Interface 僅作類(lèi)型定義,不進(jìn)行數(shù)據(jù)類(lèi)型強(qiáng)制轉(zhuǎn)換,與 Java 的 POJO 類(lèi)不同。 interface 無(wú)法自動(dòng)將 json 字符串轉(zhuǎn)換為數(shù)字。即使定義 createTime 為 number,后端返回字符串,TypeScript 接收的仍是字符串。因此,interface 定義需與實(shí)際 JSON 數(shù)據(jù)類(lèi)型一致。 將 Icon 接口中的 createTime 和 updateTime 修改為 String 或 number | string 類(lèi)型可以解決類(lèi)型不匹配的編譯錯(cuò)誤。
為了解決后端返回的時(shí)間數(shù)據(jù)類(lèi)型問(wèn)題,可以使用 Java 的 JSON 處理庫(kù)(例如 Jackson)的注解控制時(shí)間數(shù)據(jù)的序列化格式。@JsonFormat(shape = JsonFormat.Shape.NUMBER) 注解可以將 Timestamp 類(lèi)型數(shù)據(jù)序列化為數(shù)值型時(shí)間戳。
另一種方法是使用 spring 的 @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) 注解,指定日期時(shí)間的格式。
通過(guò)以上方法,確保后端返回的時(shí)間數(shù)據(jù)格式與前端期望格式一致,避免前端處理錯(cuò)誤。