前后端项目中可能会遇到“前端→后台",”后台→前端“传输过长的数字ID时,精度丢失的问题
比如id超过17位后,f12接口调试在preview里查看是从18位起都是0,但从response里看,返回的是正确的id。
原因分析:
JS 中能精准表示的最大整数是 Math.pow(2, 53),十进制即 9007199254740992
解决方案
- 方案一:
缩减id长度(短存一定风险)。 - 方案二:
将id转成字符串进行传递(下面是基于FastJson)@Configuration public class SessionConfig implements WebMvcConfigurer{ @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonHttpMessageConverter fastJsonConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fjc = new FastJsonConfig(); SerializeConfig serializeConfig = SerializeConfig.globalInstance; serializeConfig.put(Long.class , ToStringSerializer.instance); serializeConfig.put(Long.TYPE , ToStringSerializer.instance); fjc.setSerializeConfig(serializeConfig); fastJsonConverter.setFastJsonConfig(fjc); converters.add(fastJsonConverter); } }
评论区