后端雪花算法生成的id传递给前端两者不一样

最近做项目的时候,后端从数据库查找所有的数据然后将这些数据返回给前端,但是前端收到数据之后,我将数据之后打印出来发现:除了我通过雪花算法生成的id数据对不上之外所有数据都正确,我最开始以为是我后端返回的数据有问题,然后我又把后端的数据打印出来,发现跟数据库是一样的,没有出现任何问题。百思不得其解,然后上网查了一下发现,long类型继承的是number类,而number类型的精度为16位,而我的雪花算法生成的id是18位的,因此会导致进度丢失

解决方案

方案一:如果想要精度不丢失,在传递的时候可以将long类型转化为string类型。就是json中的id不能是long类型

方案二:可以加一个配置类来实现,将long类型转化为字符串,代码如下:

@Configuration
public class JacksonConfig {
    @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;
    }
}

方案三:在传输的id字段上加一下注解

@JsonSerialize(using = ToStringSerializer.class)

方案四:在application.properties中加一下配置(将所有的数字(long,int)转化为字符串)

spring.jackson.generator.writeNumberAsString=true
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值