前后端時間數據類型不一致如何解決?

前后端時間數據類型不一致如何解決?

前后端時間數據類型不匹配的解決方法

本文分析前后端時間數據類型不一致問題,并提供具體的解決方案。問題根源在于后端返回的時間數據類型與前端預期類型不符,導致前端無法直接處理。

后端使用Javatimestamp類型和mysqldatetime類型存儲時間,前端typescript定義createtime和updatetime為number類型。然而,前端接收到的res.icons[0].createtime卻是字符串,而非預期的時間戳數字。

問題原因在于TypeScript的Interface僅為類型定義,缺乏Java POJO類的反射能力,無法自動將json字符串轉換為數字。即使在TypeScript中定義createtime為number類型,如果后端返回的JSON數據中createtime是字符串,前端接收到的數據仍然是字符串。因此,interface的定義必須與實際返回的JSON數據類型一致。 最佳實踐是將前端icon接口中的createtime和updatetime類型修改為String或Date類型,以匹配后端返回的數據。

為了讓后端返回時間戳,可以使用Jackson庫的@JsonFormat注解或spring的@DateTimeFormat注解。

使用@JsonFormat注解:

通過指定shape為JsonFormat.Shape.NUMBER,可以將時間數據序列化為時間戳數字:

@JsonFormat(shape = JsonFormat.Shape.NUMBER) private Date date;

使用@DateTimeFormat注解:

通過指定ISO屬性,可以控制時間格式,同樣可以實現返回時間戳的目的:

@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) private Date date;

通過以上方法,后端可將時間數據格式化為時間戳,解決前端時間數據類型不一致的問題。前端也需要根據后端實際返回的數據類型調整icon接口定義。

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享