前端接收了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
相关推荐
东离与糖宝9 小时前
Java 26 Vector API 第十一轮孵化:AI 推理性能提升 80% 实战
java·人工智能
星如雨グッ!(๑•̀ㅂ•́)و✧10 小时前
WebClient请求样例
java
两年半的个人练习生^_^10 小时前
dynamic-datasource多数据源使用和源码讲解
java·开发语言·数据库·mybatis
酉鬼女又兒10 小时前
零基础入门前端 第十三届蓝桥杯省赛 :水果拼盘 Flex一篇过(可用于备赛蓝桥杯Web应用开发)
前端·css·职场和发展·蓝桥杯·css3
无籽西瓜a10 小时前
【西瓜带你学设计模式 | 第一期-单例模式】单例模式——定义、实现方式、优缺点与适用场景以及注意事项
java·后端·单例模式·设计模式
wefly201710 小时前
m3u8live.cn:免安装 HLS 在线播放器,流媒体调试效率神器
开发语言·javascript·python·django·ecmascript·hls.js 原理·m3u8 解析
吴声子夜歌10 小时前
TypeScript——索引类型、映射对象类型、条件类型
git·ubuntu·typescript
J_liaty10 小时前
JavaScript 基础知识全解析:从入门到精通
开发语言·javascript
weixin1997010801610 小时前
《苏宁商品详情页前端性能优化实战》
前端·性能优化