REST请求中的JSON长整型与原始长整型不同

3
我正在使用Java 16和spring-boot(2.5.3)创建一个REST API,它返回一个Long属性和Long属性的String版本。Long是通过Java的Random().nextLong()方法创建的,而String则是该Long值的toString()方法的结果。在返回的对象中,我将Long设置为prop1,将String设置为prop2。如果我调试我的代码,返回对象中的这两个值相同。但是,在浏览器开发工具中查看返回值时,有时两者会不同。
例如:prop2: "8809294616433182964",prop1: 8809294616433183000
有人能解释一下原因,并说明如何在不出现这种情况的情况下使用Long吗?如果我使用Long.valueOf(Random().nextInt()),一切都正常,所以这似乎取决于long值的大小。我的所有对象ID都基于Long,如果ID变得太大,我不想遇到问题。

如果一切都按照您所描述的设置,那么这两个值应该是相同的。请问您能否分享您的代码(最好是一个最小化的可复现示例)?您是否尝试设置“Long.MAX_VALUE”?在那种情况下,您的响应是什么样子的? - slartidan
1
JavaScript默认不支持64位整数,参见这个问题 - slauth
@slauth,那么Spring(Jackson)的JSON解析器已经使用了JS 53位整数,并像您链接的问题描述的那样近似值了吗? - chaosKP
我本以为在Java端生成的JSON应该是正确的,只有在JS代码内部值才会出错。 - chaosKP
@chaosKP 你说得对,这个错误只会在解析JSON时出现。很可能是你的浏览器开发工具控制台在做这件事。如果有疑问最好使用curl来尝试。 - slauth
1个回答

0

就像@slauth所说的那样,问题在于js 53位整数实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接