前段时间在项目中突然发现JSON数据在前端和后端显示不对应,检查一番才知道,原来是Long类型数值长度过长导致精度丢失。
在网上找了下解决的方式。
最直接的就是将Long类型数据在后端处理转换为字符串。如果系统中使用Long类型数据过多,可以用适配器WebMvcConfigurerAdapter,功能是在RestController下进行JSON转换的时候,将Long类型的数据转成字符串。以下是代码:
@Configuration public class WebJsonConfig extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper objectMapper = new ObjectMapper(); /** * 序列换成json时,将所有的long变成string 因为js中得数字类型不能包含所有的java long值 */ SimpleModule simpleModule = new SimpleModule(); simpleModule.addSerializer(Long.class, ToStringSerializer.instance); simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); objectMapper.registerModule(simpleModule); jackson2HttpMessageConverter.setObjectMapper(objectMapper); converters.add(jackson2HttpMessageConverter); } }
前提框架是springmvc。可根据思路适应调整。摘自:https://blog.csdn.net/qq_30281443/article/details/79956978?utm_source=blogxgwz0
缺点是对所有的Long类型进行处理了。
js精度丢失的上限位数是十六位,在设计数据类型的时候应该考虑这个问题了。
用博客记录个小问题。