SpringBoot傳給前端Long類型精度丟失的解決方案
背景
- 后端:Java、SpringBoot......
- 前端:JavaScript、Vue......
問題展示
接口展示

數(shù)據(jù)響應(yīng)展示:

瀏覽器預(yù)覽展示:

問題原因
- Java中,Long類型為64位有符合整數(shù),取值范圍是-2^63到2^63-1。
- JavaScript中,所有數(shù)字均基于IEEE 754的雙精度浮點(diǎn)數(shù)標(biāo)準(zhǔn),其安全的整數(shù)范圍是-(2^53-1)到2^53-1。
超出最大數(shù)值的時候Long類型就會精度丟失。
問題解決方案
在SpringBoot將數(shù)據(jù)傳給前端前,會默認(rèn)使用Jackson序列化Java對象為JSON,Long類型默認(rèn)將其轉(zhuǎn)換成Number類型,到Long類型的數(shù)值超過Javas安全范圍的數(shù)值時就會發(fā)生精度丟失,
方案一:使用@JsonSerialize注解
在你需要處理的字段添加注解。 實(shí)現(xiàn)如下面代碼所示:
@Data
public class Book {
@JsonSerialize(using = ToStringSerializer.class)
private Long id; // 主鍵ID
private String name;
}
方案二:全局配置
將全部Long類型統(tǒng)一處理。實(shí)現(xiàn)如下面代碼所示:
@Configuration
public class JacksonConfig {
@Bean
@Primary
@ConditionalOnMissingBean(ObjectMapper.class)
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
SimpleModule simpleModule = new SimpleModule();
// 將Long類型序列化為String類型
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
return objectMapper;
}
}
總結(jié)
上面兩種方案都是將Long類型轉(zhuǎn)換成String類型,前端使用String類型來保存保持精度不發(fā)生丟失問題。開始我遇到這個問題的時候,我直接認(rèn)為是前端代碼寫的有問題,所有接到的數(shù)據(jù)才會出現(xiàn)問題,因?yàn)槲襨nife4j響應(yīng)的數(shù)據(jù)沒有問題,結(jié)果前端自己搞來搞去了很久,找了其他人,之后才有人說是這個問題,當(dāng)時的自己實(shí)際上是第一次前端后端一起合作開發(fā)一個小項(xiàng)目,給我的感受就是有許許多多的問題是只有在實(shí)踐中才會發(fā)現(xiàn)的,而不是坐在大學(xué)的課堂中去學(xué),而應(yīng)該自己主動的去進(jìn)行技術(shù)學(xué)習(xí),然后將學(xué)的知識運(yùn)用在開發(fā)中,許許多多的問題是只有自己遇到了,才會記憶猶新,并且通過自己解決,下次遇到就有應(yīng)對之法。
以上就是SpringBoot傳給前端Long類型精度丟失的解決方案的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Long類型精度丟失的資料請關(guān)注腳本之家其它相關(guān)文章!
- SpringBoot返回long,前端接收進(jìn)度丟失,@JsonSerialize不生效問題
- SpringBoot返回前端Long類型字段丟失精度問題及解決方案
- SpringBoot分頁的實(shí)現(xiàn)與long型id精度丟失問題的解決方案介紹
- springboot?Long?精度丟失問題解決
- SpringBoot2.0解決Long型數(shù)據(jù)轉(zhuǎn)換成json格式時丟失精度問題
- SpringBoot全局配置long轉(zhuǎn)String丟失精度的問題解決
- SpringBoot全局配置long轉(zhuǎn)String丟失精度問題解決方案
- SpringBoot基于Jackson解決Long型長度丟失問題
相關(guān)文章
SpringBoot整合WebSocket的客戶端和服務(wù)端的實(shí)現(xiàn)代碼
這篇文章主要介紹了SpringBoot整合WebSocket的客戶端和服務(wù)端的實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07
Java隊(duì)列同步器之CountDownLatch實(shí)現(xiàn)詳解
這篇文章主要介紹了Java隊(duì)列同步器之CountDownLatch實(shí)現(xiàn)詳解,CountDownLatch是一個同步工具類,它允許一個或多個線程一直等待,直到其他線程執(zhí)行完后再執(zhí)行,例如,應(yīng)用程序的主線程希望在負(fù)責(zé)啟動框架服務(wù)的線程已經(jīng)啟動所有框架服務(wù)之后執(zhí)行,需要的朋友可以參考下2023-12-12
spring的TransactionSynchronizationAdapter事務(wù)源碼解析
這篇文章主要介紹了spring的TransactionSynchronizationAdapter事務(wù)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
Java查詢緩存之優(yōu)化重復(fù)查詢的執(zhí)行效率問題
這篇文章主要介紹了Java查詢緩存之優(yōu)化重復(fù)查詢的執(zhí)行效率問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-05-05
Java的Flowable工作流之加簽轉(zhuǎn)簽詳解
這篇文章主要介紹了Java的Flowable工作流之加簽轉(zhuǎn)簽詳解,Flowable是一個開源的工作流引擎,它提供了一套強(qiáng)大的工具和功能,用于設(shè)計、執(zhí)行和管理各種類型的工作流程,需要的朋友可以參考下2023-11-11
springboot項(xiàng)目中讀取.env文件參數(shù)值的兩種主流實(shí)現(xiàn)方式
在Spring Boot項(xiàng)目中,.env文件并非Spring Boot原生支持的配置格式,但可以通過第三方庫或自定義讀取邏輯來加載.env文件中的參數(shù),下面我們就來看看具體實(shí)現(xiàn)方法吧2025-12-12
MyBatis框架中Executor執(zhí)行器的使用及說明
文章詳細(xì)介紹了MyBatis的Executor執(zhí)行器,包括其定義、作用、生命周期、四種可選執(zhí)行器類型(SIMPLE、REUSE、BATCH、CachingExecutor)以及它們在執(zhí)行鏈路中的協(xié)作關(guān)系,文章還討論了插件機(jī)制、緩存機(jī)制、事務(wù)管理以及常見誤區(qū)澄清等內(nèi)容2025-11-11
詳解Spring mvc DispatchServlet 實(shí)現(xiàn)機(jī)制
本篇文章主要介紹了詳解Spring mvc DispatchServlet 實(shí)現(xiàn)機(jī)制,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09

