前后端分离,Jackson,Long精度丢失

案例:后端接口放回一个Long数据

复制代码
    @GetMapping("/testForLong")
    public Map<String, Object> testForLong() {

        Map<String, Object> map = new HashMap<>();
        map.put("aaa", 1234567890123456789L);

        return map;
    }

实际前端接收的数据

前后端数据不一致。这是因为JavaScript中的数字一律采用IEEE-754标准的64位浮点数表示,这种格式可以很好地处理大多数数字运算,但对于非常大的整数(超出2^53 - 1),就可能出现精度损失,这就非常的恶心了,可能会让你感到莫名其妙。当从后端获取到Long类型的值并尝试在前端展示时,如果该值超过了JavaScript安全整数范围,那么显示的结果可能不准确。

如何解决:

全局解决方案:项目中所有的Long都会被转换为String进行输出。

java 复制代码
@Component
public class PackMapperCustomizer implements Jackson2ObjectMapperBuilderCustomizer {
    @Override
    public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
        jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance);
    }
}

某个字段单独处理:

java 复制代码
@Data
public class TestVo {

    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;
    
    private String name;
    private Long code;
}
相关推荐
七夜zippoe18 分钟前
JVM调优实战:从GC日志分析到参数配置(Xmx, Xms, XX:+)
java·jvm·gc·jit·垃圾回收器
这不小天嘛25 分钟前
多模态智能对话系统-后端开发
java
2509_9408802225 分钟前
springboot集成onlyoffice(部署+开发)
java·spring boot·后端
切糕师学AI40 分钟前
Spring 中的 @Service 注解
java·spring
10km42 分钟前
java:Apache Commons Configuration2 占位符使用详解
java·apache·占位符·configuration2·commons·interpolator
qq_479875431 小时前
X-Macros(3)
java·开发语言
想不明白的过度思考者1 小时前
Spring Web MVC从入门到实战
java·前端·spring·mvc
Andy1 小时前
Docker 初识
java·docker·容器
SunnyDays10111 小时前
Java 高效实现 PPT 转 PDF
java·ppt转pdf
IUGEI1 小时前
【后端开发笔记】JVM底层原理-内存结构篇
java·jvm·笔记·后端