后端id设置long类型时,传到前端,超过19位最后两位为00

文章目录

后端id设置long类型时,传到前端,超过19位最后两位为00

一、引言

在后端开发中,我们经常会遇到需要将ID作为标识符传递给前端的情况。当ID的类型为long时,如果该ID超过19位,前端JavaScript在处理时可能会遇到精度问题,导致最后两位变成00。本文将探讨这一问题的原因以及解决方案。

二、问题概述

1、问题背景

在Java中,Long类型的取值范围是-9223372036854775808到9223372036854775807(即-2^64到2^64-1)。然而,JavaScript中的Number类型取值范围是-9007199254740992到9007199254740991(即-2^53到2^53-1)。当long类型的ID超过JavaScript的Number类型范围时,就会出现精度丢失的问题。

2、问题示例

假设后端生成了一个超过19位的ID,如1639542977692344321,当这个ID传递到前端时,JavaScript可能会将其错误地解析为1639542977692344300,即最后两位变成了00。

三、解决方案

1、将ID转换为字符串

为了避免精度丢失,我们可以在后端将long类型的ID转换为字符串。这样,无论ID的长度如何,前端都可以正确地接收和处理。

1.1、使用@JsonSerialize注解

在Java中,我们可以使用@JsonSerialize注解来指定ID字段的序列化方式。通过ToStringSerializer类,我们可以确保ID在序列化时被转换为字符串。

java 复制代码
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;

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

    // 其他属性和方法
}

2、前端处理

在前端,我们可以直接使用接收到的字符串ID,无需进行任何转换。这样可以确保ID的完整性和准确性。

四、总结

通过将后端的long类型ID转换为字符串,我们可以避免在传递给前端时出现的精度丢失问题。这种方法简单有效,可以确保ID在前后端之间的传递过程中保持准确无误。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章:

相关推荐
蜗牛攻城狮2 小时前
微前端四大方案选型对比与最佳实践:qiankun、micro-app、wujie、Module Federation
前端·微前端·qiankun·前端架构·micro-app·wujie
她说可以呀3 小时前
Vue插槽
前端·javascript·vue.js
qq_448011164 小时前
Vue + Jinja2两套模版与法冲突造成undefinedError
前端·javascript·vue.js
aixingpan4 小时前
aixingpan.cn API开发文档:前端查询夏令时和时区接口指南
前端·php
2601_958352904 小时前
23.5×19mm 换掉一整条音频链?|A-68 集成了什么:ADC / DAC / 24.576MHz 时钟 / AEC / 波束降噪,主控仅需 6 根线
前端·音视频·ai降噪·回声消除·语音模块
志尊宝5 小时前
AI原生前端开发(039):AI辅助的Nuxt 4全栈开发
前端·vue.js·ai-native
FRing036 小时前
JavaScript入门到精通三十二(深拷贝、浅拷贝、递归函数)
开发语言·前端·javascript
excel6 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
外收内放6 小时前
Python基础语法练习题(73)
java·前端·python
风骏时光牛马7 小时前
面向复杂场景的大模型应用落地与能力优化实践
前端