springboot前后端分离下,传递到前端的Long类型出现精度丢失的问题解决

本文介绍了如何在SpringBoot中使用Jackson进行Long类型到String的全局转换,避免精度丢失问题。提供了两种方案:属性注解和自定义Jackson配置。通过创建Jackson2ObjectMapperBuilderCustomizer并重写customize方法,实现了全局的Long类型到String的序列化。此配置已在生产环境中验证有效。
摘要由CSDN通过智能技术生成

此方案基于springboot使用的默认Jackson类库,不需要引入其他jar包。

方案一:

直接在Javabean的属性上使用注解:

@JsonSerialize(using = ToStringSerializer.class) 
private Long id;

这种方式适合需要重构序列化属性不多的情况下使用,如果需要重构的属性过多,每个属性都去加注解,还是挺麻烦的。由此,方案二来了。

方案二:

重新构建Jackson序列化方式,将全局long类型转化为String。

新建一个类,实现Jackson2ObjectMapperBuilderCustomizer接口,重写它的customize方法。

该接口的源码如下:

package org.springframework.boot.autoconfigure.jackson;

import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

@FunctionalInterface
public interface Jackson2ObjectMapperBuilderCustomizer {
    void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder);
}

现在,我们来新建一个配置类,重写Jackson2ObjectMapperBuilderCustomizer接口的customize方法。

@Configuration
public class JacksonConfig {
    
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        Jackson2ObjectMapperBuilderCustomizer cunstomizer = new Jackson2ObjectMapperBuilderCustomizer() {
            @Override
            public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
                jacksonObjectMapperBuilder.serializerByType(BigInteger.class, ToStringSerializer.instance);
                jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance);
            }
        };
        return cunstomizer;
    }
}

以上方案经过生产环境测试可以,祝大家永无bug,元旦快乐!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值