后端id设置long类型时,传到前端,凌驾19位最后两位为00 ...

打印 上一主题 下一主题

主题 881|帖子 881|积分 2643

后端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在序列化时被转换为字符串。
  1. import com.fasterxml.jackson.databind.annotation.JsonSerialize;
  2. import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
  3. public class SomeEntity {
  4.     @JsonSerialize(using = ToStringSerializer.class)
  5.     private Long id;
  6.     // 其他属性和方法
  7. }
复制代码
2、前端处置处罚

在前端,我们可以直接使用吸取到的字符串ID,无需进行任何转换。这样可以确保ID的完整性和正确性。
四、总结

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

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


  • 后端id设置long类型时,传到前端,凌驾19位最后两位为00_java id发送到前端-CSDN博客

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表