前后端分离,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;
}
相关推荐
keyipatience1 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
weixin_408099671 小时前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)
java·python·php·图片处理·api调用·图片去水印·石榴智能
钱六两2 小时前
#3、SpringAI 接入deepSeek大模型(喂饭版)
java·spring boot·ai编程
null_173 小时前
IntelliJ IDEA 极致流畅配置方案:Ultra 9 285K + 64GB 内存实测
java·ide·intellij-idea
Herbert_hwt3 小时前
建立Java程序开发
java·开发语言
好好沉淀3 小时前
@ExcelIgnoreUnannotated 和 @AutoMapper 详解
java
愚公移码4 小时前
蓝凌EKP18产品:流程虚拟机(PVM)
java·开发语言·前端
驰骋工作流4 小时前
流程引擎BPM设计之:流程消息
java·工作流引擎·bpm·jflow·ccflow
dogstarhuang4 小时前
从 0 到 1 搭建可收费的 API 开放平台(实战)
java·架构·api
VortMall5 小时前
『平台去经营化』平台治理能力全新重构|VortMall微服务商城系统v1.3.10
java·大数据·微服务·商城系统·开源商城·vortmall·去经营化