最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java后端給前端傳Long值精度丟失的問題與解決方法

 更新時間:2025年06月11日 09:37:22   作者:眾樂樂_2008  
在Java后端將 long 類型數(shù)字傳遞到前端時,可能會出現(xiàn)精度丟失的問題,下面這篇文章主要介紹了Java后端給前端傳Long值精度丟失的問題與解決方法的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

前言

在前后端分離的開發(fā)中,Java 后端通常使用 Long 類型作為主鍵 ID(如雪花算法生成的 ID)。但如果直接將 Long 返回給前端,可能會導致前端精度丟失的問題,特別是在 JavaScript 環(huán)境中。

問題本質(zhì)

JavaScript 的 Number 類型基于 IEEE 754 雙精度浮點數(shù),只能安全表示的整數(shù)范圍是:

[-2^53 + 1, 2^53 - 1] => [-9007199254740991, 9007199254740991]

而 Java 的 Long 最大值是 9223372036854775807,遠超 JS 能表示的范圍。

如果后端返回:

{
  "id": 9223372036854775807
}

前端打印可能是:

console.log(data.id); // 輸出 9223372036854776000(精度已丟失)

解決方案

方法一:全局配置 Jackson 將 Long 轉(zhuǎn)為 String(推薦)

在 Spring Boot 項目中,可以通過配置 ObjectMapper,讓所有 Long 類型序列化為 String,避免精度問題:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JacksonConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        SimpleModule simpleModule = new SimpleModule();
        // Long 和 long 全部轉(zhuǎn)為字符串
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
        objectMapper.registerModule(simpleModule);
        return objectMapper;
    }
}

?? 生效后,所有 Long 類型字段將自動序列化為字符串,前端拿到的 ID 是 "9223372036854775807",避免精度問題。

方法二:僅對單個字段生效(局部注解)

如果你只想對部分字段(如 id)轉(zhuǎn)為 String,可在字段上添加注解:

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;

public class UserDTO {
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

    // 其他字段...
}

方法三:前端處理(不推薦)

雖然前端可以用字符串處理 ID,但如果后端返回的是數(shù)字,JS 在接收數(shù)據(jù)的第一步就已經(jīng)丟了精度。因此根本的解決方式應(yīng)該在后端。

總結(jié)

方式是否推薦說明
后端全局轉(zhuǎn) String? 強烈推薦統(tǒng)一、安全
局部字段注解? 適用于個別字段
僅前端處理? 不推薦精度可能已丟失,無法挽回

到此這篇關(guān)于Java后端給前端傳Long值精度丟失問題與解決方法的文章就介紹到這了,更多相關(guān)Java傳Long值精度丟失內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

汽车| 彰化市| 宣城市| 明水县| 荔浦县| 韩城市| 东乡| 克东县| 登封市| 榆社县| 应城市| 繁昌县| 萨嘎县| 和林格尔县| 伊春市| 留坝县| 葫芦岛市| 定边县| 洛隆县| 吴桥县| 六枝特区| 普格县| 顺平县| 海城市| 邵阳县| 余姚市| 石屏县| 许昌市| 平湖市| 伊金霍洛旗| 泸溪县| 逊克县| 深泽县| 九江市| 武山县| 陇川县| 崇阳县| 密山市| 高要市| 渝北区| 陇川县|