前端返回数据类型Long时,精度丢失,最后两位显示为0

        开发的时候遇到一个问题, 查询接口返回值中的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;
  }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值