天天看點

後端向前端傳遞Long類型資料,導緻資料不一緻

1. 背景:

後端商品實體的id字段為Long,從ES中查出封裝,以Json的形式傳回給前端。結果發現前端展示的的id全為 1244864296175140900。通過在後端列印查出的資料發現實際id有:1244864296175140890、1244864296175140889等等。

把後端列印的Json串放進線上Json工具,發現id也會變為1244864296175140900。

至此,排除了自己代碼邏輯的問題。。。

2.原因:

當後端傳Long類型給前端, Long類型資料大于17位時。前端拿到的資料: 第16位會四舍五入, 17位後的資料自動用0代替),在Json中就會出現精度丢失的情況。

哭了。。。

3.解決

(1)用String代替Long:

這種方式代價太大,資料庫的id類型一般都會是bigint,對應Java中Long。

是以修改後需要修改很多地方。

(2)不修改Long類型,隻在進行Json序列化時,以String的形式去序列化:

這種方式對原有代碼不需要修改。

a. 使用SpringBoot的字段Json序列化方式:

@JsonSerialize(using = ToStringSerializer.class)
    private Long skuId;
           

自己使用的是這種。

b. 使用FastJson的字段Json序列化方式