前端時間數據處理難題及解決方案
本文探討前端接收后端時間數據時遇到的類型轉換問題。后端數據庫(例如mysql)使用dateTIME或timestamp類型存儲時間,但前端(例如使用typescript)接收到的數據卻是字符串,導致無法直接進行日期時間計算(如提取年月日)。
問題根源在于:后端使用Java的Timestamp或類似類型,前端TypeScript接口(例如Icon接口中的createTime和updateTime屬性定義為number)僅為類型聲明,缺乏Java POJO類的反射能力,無法自動將json字符串轉換為數字。即使接口定義為number,如果后端返回JSON數據中的createTime字段是字符串,TypeScript仍會將其解析為字符串,造成類型不匹配。
解決方案:
立即學習“前端免費學習筆記(深入)”;
-
調整接口類型: 修改Icon接口,將createTime和updateTime屬性類型改為String或number | string,以兼容后端返回的字符串類型。 之后,使用Date.parse()或其他JavaScript日期時間處理函數將字符串轉換為時間戳(數字)進行后續操作。
-
后端數據格式化: 理想情況下,后端應直接返回時間戳(數字)給前端。 如果后端使用Jackson庫,可以使用@JsonFormat(shape = JsonFormat.Shape.NUMBER)注解將日期字段序列化為unix時間戳(數字)。 類似地,spring框架可以使用@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)注解控制日期時間格式。 這能避免前端繁瑣的類型轉換,提升代碼效率和可讀性。
通過以上方法,可以有效解決前端接收后端時間數據類型不一致的問題,確保前端能夠正確處理時間數據。