前端接收了id字段,发送给后端就变了

前端初次请求用户信息,后端发送的用户 id 是长整型在数据库设计层面,长整型是最高效最节省空间的做法)。

json 复制代码
{
  "id": 260561497745260544  // int8
}

虽然 前端的 id 字段是用 string 接收到,但实际转换时,会先用 number 存储,然后转字符串。

由于 int8 整数可能会超过 number 的表示范围,就比如我的例子:

  • 260561497745260544 远大于 Number.MAX_SAFE_INTEGER = 2^53 - 1 = 9007199254740991

因为前端 js 会向下取一个能表示的数,因此 id 变了。

解决方法:后端应该传字符串

java 复制代码
@Data
public class UserResponseDTO {
    @JsonFormat(shape = JsonFormat.Shape.STRING)  // 字符串
    private Long id;
    ...
    }

或者全局生效:

yaml 复制代码
spring:
  jackson:
    generator:
      write_numbers_as_strings: true
相关推荐
想带你从多云到转晴14 小时前
03、JAVAEE---多线程(三)
java
光影少年14 小时前
React 项目常见优化方案
前端·react.js·前端框架
满怀冰雪14 小时前
第04篇-双指针算法-从有序数组到回文判断的高频解法
java·算法
matlabgoodboy14 小时前
计算机java程序代写python代码编写c/c++代做qt设计php开发matlab
java·c语言·python
lichenyang45314 小时前
把 demo 里的 console.log 全换成 HiLog:从 %{private} 没脱敏的困惑说起
前端
烬羽14 小时前
JS 单线程为什么不卡?一文吃透同步异步、Event Loop 和 Promise
javascript·面试
光影少年14 小时前
组件复用:HOC、Render Props、自定义Hook 对比
前端·react.js·掘金·金石计划
视觉小萌新14 小时前
C++利用libmicrohttpd制作交互网页端——C1
java·c++·交互
Gauss松鼠会14 小时前
【GaussDB】GaussDB SMP特性调优详解
java·服务器·前端·数据库·sql·算法·gaussdb
葬送的代码人生14 小时前
JavaScript 数组完全指南:从入门到实战
前端·javascript·算法