日常BUG——使用Long类型作id,后端返回给前段后精度丢失问题

  • 😜作 者 :是江迪呀
  • ✒️本文关键词 :日常BUG、BUG、问题分析
  • ☀️每日 一言 :存在错误说明你在进步!

一、问题描述

数据库long类型Id:

前端返回的Id实体类:

java 复制代码
@Data
@ApiModel("xxx")
public class TestVO{
    @ApiModelProperty("id")
    private Long id;
    ...
}

前端拿到的Id:

java 复制代码
{
"id": 1535525132997402600,
"attributeCode": "COLOR",
"attributeName": "颜色2",
"attributeDesc": "颜色2",
"createTime": "2022-06-11 15:31:35",
"createUser": "test"
},

二、问题原因

这是因为使用Long类型作id时,前后端交互时数据在网络上传输会导致精度丢失。

三、问题解决

在返回给前端的Dto类中,在Id上面加上下面的注解即可:

java 复制代码
@JsonSerialize(using = ToStringSerializer.class)

这样id就正常了

java 复制代码
{
    "id": "1535525132997402625",
    "attributeCode": "COLOR",
    "attributeName": "颜色2",
    "attributeDesc": "颜色2",
    "createTime": "2022-06-11 15:31:35",
    "createUser": "test"
},

},

如果前端要传给后端id的话,也会造成上面的问题。解决办法是前端将Long类型的字段转为String,后端在将String 转为Long即可。

相关推荐
李永奉1 小时前
杰理可视化SDK开发-【BUG】AC7006F8芯片开启一拖二和双麦通话语音算法后,设置触摸音在唤醒语音助手和通话时触摸音没作用问题
单片机·嵌入式硬件·mcu·物联网·电脑·bug
ss2732 小时前
基于springboot+vue+mysql「校园二手教材循环交易」小程序,三端全跑通
vue.js·spring boot·mysql
凯凯姜12 小时前
MySQL 联合索引设计与索引失效
数据库·mysql
小羊没烦恼!16 小时前
异步编程:线程概述及使用
java·开发语言·mysql·算法·c#
这个DBA有点耶16 小时前
Redo Log循环写与checkpoint推进:长事务阻塞下的Checkpoint风暴完整链路
数据库·mysql·代码规范
梦影_18 小时前
MySQL进阶教程(一)—— 储存过程与触发器(上)
开发语言·数据库·后端·sql·mysql·中间件
stark张宇19 小时前
库存扣减的“锁”事:悲观锁、乐观锁、分布式锁
redis·分布式·mysql
qq_白羊座19 小时前
口头说的 JSON 和 MySQL 里的 JSON
数据库·mysql·json
花间相见20 小时前
【计算基础|MySQL11】事务与隔离级别
sql·mysql·adb·架构
eleven_4u21 小时前
MySQL引擎层是如何工作的
数据库·mysql