Jackson JsonSerialize 注解解决前后端long类型覆盖范围不一致的问题
Jihongchang(讨论 | 贡献)2026年1月26日 (一) 09:34的版本
前端 JS 里的 Number 类型 和 Java 里的 long 类型是不一致的。
问题场景是:
若依框架自动生成的前后端REST接口代码,后端对象的属性是 Long 类型,查完之后点击对应单条记录执行查看明细、编辑、删除操作都会有问题。
因为默认后端的 Long 放到 JSON 对象里到前端是 Number,但因为两者可以表示数值的范围不同,所以在数值大到超过一个值的时候,前端再传到后端的就不是和原先 Long 相等的值了,比如雪花ID,解决方案就是在对应属性上加注解:
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
public class Student {
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
}
这样后端往前端传数据的时候,就会把 Long 序列化成字符串,前端再传值到后端的时候也不用担心,会自动再由 字符串 转成 Long