mybatis-plus雪花算法自动生成ID传到前端导致精度丢失

后端返回的数据如图所示:

但是前端在接收的时候与后端返回的id不一样:

发生的原因

雪花算法自动生成的id长度是19位,而js里Number类型安全的最大整数只有16位,所以就导致了数据的精度丢失

 后端实体类如下:

后端中用Long类型来接收是没有问题,但是传到前端后解析为json时会被解析为Number类型,所以就会发生精度丢失。

解决方案

 在后端返回给前端的数据进行JSON序列化时,将Long类型转为String类型,再返回给前端

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

@Configuration
public class JacksonConfiguration {

    @Bean
    @ConditionalOnMissingBean(ObjectMapper.class)
    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder){
        ObjectMapper objectMapper = builder.createXmlMapper(false).build();

        SimpleModule simpleModule = new SimpleModule();
        // 将Long类型转为String类型
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        objectMapper.registerModule(simpleModule);
        return objectMapper;
    }
}

重新启动测试,由于前端接收到的数据是字符串格式,所以不会发生精度的丢失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值