在写后端的时候,发现后端传过去前端的时候,后端的数据是对的,前端接收的时候,数据对不上,并且还有重复的数据存在,问题如下
后端的代码是返回一个分页数据,其中出问题的是id,这里的在后端中id是Long类型
数据库的这个id是bigInt类型,此时这样返回给到前端是如下结果
结果竟然是全都精度丢失了,变成了一样的
然而数据中,是这样的
出现的原因我这里不是特别明白,日后明白了这里我再补上,我看了别人写的,是因为,前端接收的类型只有number类型,他只有16位,而我们java的long类型是19位,那么就会精度丢失,这很正常,解决办法也很简单粗暴,我们只要换成string类型就ok了,但是这个解决方法有很多中解决方法,再一下做一个记录
第一种解决方法:
写配置,我们在webconfig中,配置一个消息转换器,每次有long类型的数据,就转成string,这样挺方便,就是前端接收的时候,要知道
/**
* 配置类,注册web层相关组件
*/
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {
@Override
protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = jsonConverter.getObjectMapper();
//序列换成json时,将所有的long变成string
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
//加上转换器
converters.add(jsonConverter);
}
}
第二种,方法,注解法
写一个注解,这样效率不高,但是能解决,就是每次都要在实体类上写,麻烦的很,我不乐意干这个,但是也记录下来
@JsonFormat(shape = JsonFormat.Shape.STRING)
private Long id;
这样也是没有问题的
我认为第一种解决方法,不错了,但是还是有些别扭,Long转换成string,总是不得劲,有强迫症,以后有更好的方案,就贴在这来
原文地址:https://blog.csdn.net/weixin_52232901/article/details/135772925
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_62269.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!