使用雪花算法產(chǎn)生id導(dǎo)致前端精度缺失問題解決方案
一、問題根源
JavaScript的 Number
類型安全精度最大為16位(IEEE 754標(biāo)準(zhǔn)),而雪花算法生成的ID通常為18-19位(如1896876827460800512
),超出安全范圍導(dǎo)致末2-3位精度丟失,前端則顯示為( 1896876827460800500)。
二、解決方案
1. 全局配置Jackson序列化規(guī)則
通過ObjectMapper將Long類型序列化為String,確保前端接收為字符串類型:
@Bean public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); SimpleModule module = new SimpleModule(); module.addSerializer(Long.class, ToStringSerializer.instance); objectMapper.registerModule(module); return objectMapper; }
●效果:id字段從數(shù)字(如1896876827460800512)轉(zhuǎn)為字符串,如"1896876827460800512"),避免精度丟失 。
2. 實(shí)體類必須使用Long封裝類
若實(shí)體類字段聲明為基本類型long,Jackson不會(huì)觸發(fā)序列化規(guī)則,因?yàn)椋?/p>
●ToStringSerializer僅對Long封裝類生效(long是基本類型,不在處理范圍內(nèi))。
●正確聲明方式:private Long id;
3. 檢查其他可能覆蓋配置的因素
●局部注解覆蓋:若某些字段使用了@JsonFormat或@JsonSerialize,需移除或統(tǒng)一配置。
●全局與局部優(yōu)先級:確保自定義ObjectMapper未被其他配置覆蓋(如application.yml中的Jackson配置)。
4. 數(shù)據(jù)庫與接口文檔調(diào)整
●數(shù)據(jù)庫字段類型:保持BIGINT(雪花ID兼容)。
●接口文檔標(biāo)注:明確說明id為字符串類型(如Swagger添加@Schema注解),避免前端誤解析為數(shù)字。
5. 測試驗(yàn)證
通過Postman或?yàn)g覽器檢查響應(yīng),確認(rèn)id字段類型已轉(zhuǎn)為字符串:
{ "id": "1896876827460800512", "taskId": "1896866728268828672" }
三、擴(kuò)展建議
前端兼容性:提醒前端避免對
id
進(jìn)行數(shù)值運(yùn)算(如加減),始終以字符串處理。分布式系統(tǒng)一致性:確保所有服務(wù)使用相同的序列化配置,避免部分接口返回?cái)?shù)字、部分返回字符串。
性能優(yōu)化:若接口性能敏感,可針對特定字段(而非全局)使用
@JsonSerialize(using = ToStringSerializer.class)。
四、總結(jié)
通過全局序列化配置 + 實(shí)體類使用Long
封裝類的組合方案,可徹底解決雪花ID精度丟失問題。
到此這篇關(guān)于使用雪花算法產(chǎn)生id導(dǎo)致前端精度缺失問題解決方案的文章就介紹到這了,更多相關(guān)前端雪花算法id導(dǎo)致精度缺失內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript實(shí)現(xiàn)簡單的倒計(jì)時(shí)效果
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)簡單的倒計(jì)時(shí)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06js實(shí)現(xiàn)的訂閱發(fā)布者模式簡單示例
這篇文章主要介紹了js實(shí)現(xiàn)的訂閱發(fā)布者模式,結(jié)合完整示例形式分析了js訂閱發(fā)布者模式相關(guān)實(shí)現(xiàn)與使用方法,需要的朋友可以參考下2020-03-03uniapp如何使用uv-popup彈出框隱藏底部導(dǎo)航tabbar
文章介紹了如何在uniapp中使用uv-popup組件隱藏底部導(dǎo)航的tabbar,并提供了隱藏前和隱藏后的代碼示例,感興趣的朋友一起看看吧2025-02-02JavaScript?error瀏覽器端錯(cuò)誤捕獲處理方法筆記解決示例
這篇文章主要為大家介紹了JavaScript?error瀏覽器端錯(cuò)誤捕獲處理方法筆記解決示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06JS中實(shí)現(xiàn)簡單Formatter函數(shù)示例代碼
JS沒有提供方便使用的Formatter函數(shù),用字符拼接的方式看起來混亂難讀,下面是JS簡單實(shí)現(xiàn)版本(沒有嚴(yán)格測試)2014-08-08