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

被折叠的 条评论
为什么被折叠?



