前端初次请求用户信息,后端发送的用户 id 是长整型在数据库设计层面,长整型是最高效最节省空间的做法)。
{"id":260561497745260544// int8}虽然 前端的 id 字段是用 string 接收到,但实际转换时,会先用 number 存储,然后转字符串。
由于 int8 整数可能会超过 number 的表示范围,就比如我的例子:
260561497745260544远大于Number.MAX_SAFE_INTEGER = 2^53 - 1 = 9007199254740991
因为前端 js 会向下取一个能表示的数,因此 id 变了。
解决方法:后端应该传字符串
@DatapublicclassUserResponseDTO{@JsonFormat(shape=JsonFormat.Shape.STRING)// 字符串privateLongid;...}或者全局生效:
spring:jackson:generator:write_numbers_as_strings:true