问题描述:
后端代码Long数据为201511200001725439。
@GetMapping("/getUser")
public User getUser(){
User user=new User(201511200001725439L,"xudongmaster","123");
return user;
}
前端接收的数据就变为201511200001725440。但是PostMan不会出现这种情况,只有js才接收请求才会有这个问题。
{
"userId": 201511200001725440,
"username": "xudongmaster",
"password": "123"
}
问题分析:
1、js里面的number类型数据范围没有Java里面的Long类型数据范围大。
解决办法:
1、直接将Long类型改为String。
2、给Long类型变量添加@JsonSerialize(using = ToStringSerializer.class)注解,使Long变量在序列化时变为String类型。
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
@JsonSerialize(using = ToStringSerializer.class)
private Long userId;
3、给Long类型变量添加@JSONField(serializeUsing = ToStringSerializer.class)注解,使Long变量在序列化时变为String类型。
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.ToStringSerializer;
@JSONField(serializeUsing = ToStringSerializer.class)
private Long userId;
注:
(1)jackson序列化方式可能会失效。
(2)fastjson序列化方式需要引入maven依赖。