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

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

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

前言

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

問題本質(zhì)

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

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

而 Java 的 Long 最大值是 9223372036854775807,遠(yuǎn)超 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? 強(qiáng)烈推薦統(tǒng)一、安全
局部字段注解? 適用于個別字段
僅前端處理? 不推薦精度可能已丟失,無法挽回

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

相關(guān)文章

最新評論

南平市| 延吉市| 恭城| 闻喜县| 上杭县| 福贡县| 甘德县| 大荔县| 霍城县| 曲松县| 五峰| 且末县| 溧阳市| 和平区| 邛崃市| 夹江县| 安国市| 双牌县| 威海市| 府谷县| 越西县| 高台县| 凌海市| 政和县| 莱阳市| 巢湖市| 宁武县| 汤原县| 黄浦区| 江孜县| 泸州市| 岳普湖县| 余姚市| 加查县| 海丰县| 满洲里市| 南澳县| 宁都县| 古浪县| 晋宁县| 建昌县|