前端接收了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
相关推荐
就叫年华吧丶21 分钟前
长文档点目录定位总是不准?一个 content-visibility + 平滑滚动引发的连环坑(Vue3 实战)
前端·javascript·算法·vue
JudithHuang27 分钟前
React 路由:React Router
前端·react.js·前端框架
赵得C28 分钟前
创建 SVG 图标预览页面:从零实现到解决 CORS 问题
前端·javascript·html
IT_陈寒35 分钟前
Java的HashMap线程安全问题让我深夜掉光了头发
前端·人工智能·后端
驭渊的小故事37 分钟前
SpringBoot 配置文件详解:properties 与 yml 从入门到实战
java·开发语言·笔记
三掌柜66638 分钟前
ArkWeb 手记 04|Web 返回键别再一刀切
前端·harmonyos
Wx-bishekaifayuan39 分钟前
Springcloud中学在线学习平台58883-计算机课程设计、毕业设计
java·vue.js·spring boot·学习·spring·spring cloud·课程设计
光影少年44 分钟前
RN与Flutter架构区别
前端·flutter·react native·react.js·架构·node.js
一嘴一个橘子44 分钟前
java 中使用 lua 脚本
java
peter67681 小时前
css学习小结
前端·css·学习