开发的时候遇到一个问题, 查询接口返回值中的Long类型的数据主键id, 雪花算法生成的; 前台显示的时候,最后两位变成了0, 一开始以为是代码写错了,仔细看过之后发现这是和json序列化返回前端解析有关系.
JSON转JS对象,JSON中的数字会转为 number 类型,JS内置有32位整数,而number类型的安全整数是53位。如果超过53位,则精度会丢失。如果后台传来一个64位的Long型整数,因为超过了53位,所以后台返回的值和前台获取的值会不一样
参考:https://blog.csdn.net/u010028869/java/article/details/86563382
其实就是Long类型的数太长了,那么解决办法就是让Long类型不是Long类型是不是就行了;所以可以将Long先转成String类型再序列化返回;
解决办法:
1.使用注解的方式
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
但是使用注解的方式比较麻烦, 需要再每一个对应的字段上都添加注解
2.全局配置
在配置类中增加如下bean, 表示对全局的Long类型序列化时,转为String类型.
@Bean
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder){
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
return objectMapper;
}