欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot傳給前端Long類型精度丟失的解決方案

 更新時間:2025年03月10日 08:26:24   作者:鏡花水月linyi  
最近在做項目的時候,遇到了一個Long類型傳給前端之后,接收到的數(shù)值不對的情況,我一開始以為是前端接收數(shù)據(jù)有問題,后來經(jīng)過查找,了解到這是一個Long類型精度丟失問題,于是寫這篇文章記錄下來,也探究一下為什么會發(fā)生這種情況,需要的朋友可以參考下

背景

  • 后端:Java、SpringBoot......
  • 前端:JavaScript、Vue......

問題展示

接口展示

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

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

問題原因

  • Java中,Long類型為64位有符合整數(shù),取值范圍是-2^63到2^63-1。
  • JavaScript中,所有數(shù)字均基于IEEE 754的雙精度浮點數(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注解

在你需要處理的字段添加注解。 實現(xiàn)如下面代碼所示:

 @Data
 public class Book {
       @JsonSerialize(using = ToStringSerializer.class)
       private Long id;  // 主鍵ID
       private String name;
   }

方案二:全局配置

將全部Long類型統(tǒng)一處理。實現(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)問題,因為我knife4j響應(yīng)的數(shù)據(jù)沒有問題,結(jié)果前端自己搞來搞去了很久,找了其他人,之后才有人說是這個問題,當(dāng)時的自己實際上是第一次前端后端一起合作開發(fā)一個小項目,給我的感受就是有許許多多的問題是只有在實踐中才會發(fā)現(xiàn)的,而不是坐在大學(xué)的課堂中去學(xué),而應(yīng)該自己主動的去進行技術(shù)學(xué)習(xí),然后將學(xué)的知識運用在開發(fā)中,許許多多的問題是只有自己遇到了,才會記憶猶新,并且通過自己解決,下次遇到就有應(yīng)對之法。

以上就是SpringBoot傳給前端Long類型精度丟失的解決方案的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Long類型精度丟失的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MapStruct內(nèi)部錯誤:NullPointerException的解決方案

    MapStruct內(nèi)部錯誤:NullPointerException的解決方案

    在Java開發(fā)中,MapStruct是一個非常流行的對象映射工具,它通過注解處理器在編譯時生成映射代碼,極大地簡化了對象之間的轉(zhuǎn)換操作,本文將詳細(xì)分析一個常見的MapStruct內(nèi)部錯誤——NullPointerException,并提供一系列解決方案,需要的朋友可以參考下
    2025-02-02
  • Aspectj與Spring AOP的對比分析

    Aspectj與Spring AOP的對比分析

    這篇文章主要介紹了Aspectj與Spring AOP的對比分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 基于springboot設(shè)置Https請求過程解析

    基于springboot設(shè)置Https請求過程解析

    這篇文章主要介紹了基于springboot設(shè)置Https請求過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • 使用RedisAtomicLong優(yōu)化性能問題

    使用RedisAtomicLong優(yōu)化性能問題

    這篇文章主要介紹了使用RedisAtomicLong優(yōu)化性能問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 詳解關(guān)于Spring Cloud 框架熱部署的方法

    詳解關(guān)于Spring Cloud 框架熱部署的方法

    本篇文章主要介紹了詳解關(guān)于Spring Cloud 框架熱部署的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Java實現(xiàn)雙鏈表互相交換任意兩個節(jié)點的方法示例

    Java實現(xiàn)雙鏈表互相交換任意兩個節(jié)點的方法示例

    這篇文章主要介紹了Java實現(xiàn)雙鏈表互相交換任意兩個節(jié)點的方法,簡單講述了雙鏈表的概念,并結(jié)合實例形式給出了java雙鏈表實現(xiàn)任意兩個節(jié)點交換的操作技巧,需要的朋友可以參考下
    2017-11-11
  • Java中的程序計數(shù)器是什么

    Java中的程序計數(shù)器是什么

    這篇文章主要介紹了Java中的程序計數(shù)器是什么,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-09-09
  • java中UDP簡單聊天程序?qū)嵗a

    java中UDP簡單聊天程序?qū)嵗a

    這篇文章主要介紹了java中UDP簡單聊天程序?qū)嵗a,有需要的朋友可以參考一下
    2013-12-12
  • 詳細(xì)介紹Java關(guān)鍵字throw?throws?Throwable的用法與區(qū)別

    詳細(xì)介紹Java關(guān)鍵字throw?throws?Throwable的用法與區(qū)別

    這篇文章主要介紹了java中throws與throw及Throwable的用法和區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 利用HttpUrlConnection 上傳 接收文件的實現(xiàn)方法

    利用HttpUrlConnection 上傳 接收文件的實現(xiàn)方法

    下面小編就為大家?guī)硪黄肏ttpUrlConnection 上傳 接收文件的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11

最新評論