采用@JsonSerialize保证数据交互的精确性

本文探讨了Java的Long类型与JavaScript的Number类型在数据交互时可能遇到的精度丢失问题。通过分析两者范围差异,提出使用@JsonSerialize注解将Long转为String输出,确保前端接收数据的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天让我们在Entity、DTO、VO上都加@JsonSerialize注解,细问之下才发现前后端数据交互可能会有问题。

JavaScript中数字是Number类型,我们一般的数据库id字段都是雪花算法+uuid,采用Long类型存储。

这样就会由一个问题,我们需要知道Long类型的最大值和最小值在JavaScript中是否能够正常转化,如果超出了可转化的最大值

那么会出现精度丢失的问题,于是我先看一下Java的Long类型的最大值和最小值分别是多少

public static void main(String[] args) {
    Long maxNumber = Long.MAX_VALUE;
    Long minNumber = Long.MIN_VALUE;

    System.out.println("Long的最大值为: "+ maxNumber);
    System.out.println("Long的最小值为: "+ minNumber);
}

结果是

我们再看一下js的

const maxNumber = Number.MAX_SAFE_INTEGER;
const minNumber = Number.MIN_SAFE_INTEGER;

console.log("Number的最大值为: "+ maxNumber);
console.log("Number的最小值为: "+ minNumber);

我们发现,我们Java中Long类型远大于JavaScript中的Number整数类型,如果大于Number能表示的最大整数类型,那么一定会产生精度问题,所以我们采用@JsonSerialize(using = ToStringSerialize.class)注解。

它在我们返回给前端时,将我们的Long类型转化为String类型,这样前端接收到的数值可以保证是精确的,保证数据的精确性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值