json可以传long类型吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了json可以传long类型吗相关的知识,希望对你有一定的参考价值。

参考技术A 打开CSDN APP
Copyright © 1999-2020, CSDN.NET, All Rights Reserved

打开APP

笨鸟贤妃
关注
Long类型数据,后端序列化为Json传给前端,产生的精度丢失的问题 原创
2021-08-20 17:54:46
1点赞

笨鸟贤妃

码龄3年

关注
目录
问题描述
问题产生的原因
解决问题
1.把Long类型改为String类型,但是如果Long类型很多的话,改起来很麻烦
2.给字段加注解,序列化为String,同上,有点麻烦
3.本文中使用的是Spring boot、FastJson,通过重写WebMvcConfigurer中的configureMessageConverters方法来重新配置转换器
问题描述
表中的Id字段是mybitis-plus雪花算法生成的19位Id,后端返回给前端的结果封装中,有这个Id字段,具体返回为

return JSON.parseObject(redisValue, Result.class);
1
1
redisValue是保存在redis中的String类型的value(文章列表,包括文章Id,title等),请求后端接口的时候,先去redis中查找看是否有对于的key,若有的话,直接返回value,因为value为String类型,需要使用fastjson的格式化工具将String转为Result对象返回给前端

走缓存返回给前端的结果中Id是正确的,如图

但是再去点击某篇文章查看详情的时候,文章Id变成了这样

超过17位的最后两位直接丢失,导致拿着丢失精度之后的Id再去后端查数据根本查不到。

问题产生的原因
Long类型的数据,如果我们在后端将结果序列化为json,直接传给前端的话,在Long长度大于17位时会出现精度丢失的问题。
java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值),比如此案例中Id最后两位直接变成了0

解决问题
1.把Long类型改为String类型,但是如果Long类型很多的话,改起来很麻烦
2.给字段加注解,序列化为String,同上,有点麻烦
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
1
2
1
2
3.本文中使用的是Spring boot、FastJson,通过重写WebMvcConfigurer中的

以上是关于json可以传long类型吗的主要内容,如果未能解决你的问题,请参考以下文章

mybatis 关于传long 类型问题

json如何传 boolean

解决long类型和前端交互精度丢失问题

解决long类型和前端交互精度丢失问题

解决long类型和前端交互精度丢失问题

java后台接收前台传过来的参数只能是字符串类型吗?