Java Long数据类型如何避免前端损失精度呢?
下文笔者讲述java中Long类型传递给前端避免精度丢失的方法
在日常开发中,我们数据库中的主键采用mybatis中的自带的生成策略生成 如果实体类中采用Long类型接收 返回给前端,此时可能会损失精度
出现精度的原因
对于Long类型的数据
在Java中long数据类型是64位,最大值是2^63-1
JavaScript中的number类型,最大的安全整数2^53-1
解决前端Long类型精度丢失的方法:
将Long类型转换为字符串传回给前台
mybatis中IdType简介
@Getter
public enum IdType {
/**
* 数据库ID自增
*/
AUTO(0),
/**
* 该类型为未设置主键类型
*/
NONE(1),
/**
* 用户输入ID
* 该类型可以通过自己注册自动填充插件进行填充
*/
INPUT(2),
/* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
/**
* 全局唯一ID (idWorker)
*/
ID_WORKER(3),
/**
* 全局唯一ID (UUID)
*/
UUID(4),
/**
* 字符串全局唯一ID (idWorker 的字符串表示)
*/
ID_WORKER_STR(5);
private final int key;
IdType(int key) {
this.key = key;
}
}
| 值 | 备注 |
| IdType.AUTO | 数据库ID自增 |
| IdType.INPUT | 用户输入ID |
| IdType.ID_WORKER | 全局唯一ID,内容为空自动填充 |
| IdType.UUID | 全局唯一ID,内容为空自动填充 |
java中避免前端Long类型精度损失的方法
//方式1:
在序列化时需要保留精度的字段
添加@JsonSerialize注解即可
@JsonSerialize(using = ToStringSerializer.class)
private list<Long> id;
//方式2
在数据转换时,定义一个dto,Id字段采用给String类型
此时回传给前台时,则会自动采用String的方式
总之采用字符串的方式传回前台,即可避免精度损失
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


