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的方式 总之采用字符串的方式传回前台,即可避免精度损失
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。