在写后端的时候,发现后端传过去前端的时候,后端的数据是对的,前端接收的时候,数据对不上,并且还有重复的数据存在,问题如下
后端的代码是返回一个分页数据,其中出问题的是id,这里的在后端中id是Long类型
数据库的这个id是bigInt类型,此时这样返回给到前端是如下结果
结果竟然是全都精度丢失了,变成了一样的
然而数据中,是这样的
出现的原因我这里不是特别明白,日后明白了这里我再补上,我看了别人写的,是因为,前端接收的类型只有number类型,他只有16位,而我们java的long类型是19位,那么就会精度丢失,这很正常,解决办法也很简单粗暴,我们只要换成string类型就ok了,但是这个解决方法有很多中解决方法,再一下做一个记录
第一种解决方法:
写配置,我们在webconfig中,配置一个消息转换器,每次有long类型的数据,就转成string,这样挺方便,就是前端接收的时候,要知道
/** * 配置类,注册web层相关组件 */@Configuration@Slf4jpublic class WebMvcConfiguration extends WebMvcConfigurationSupport {@Overrideprotected void configureMessageConverters(List<HttpMessageConverter<" />>> converters) {MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();ObjectMapper objectMapper = jsonConverter.getObjectMapper();//序列换成json时,将所有的long变成stringSimpleModule 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,总是不得劲,有强迫症,以后有更好的方案,就贴在这来