Jackson JsonSerialize 注解解决前后端long类型覆盖范围不一致的问题

来自姬鸿昌的知识库
跳到导航 跳到搜索

前端 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