本文介绍: 解决我的bug

在写后端的时候,发现后端传过去前端的时候,后端的数据是对的,前端接收的时候,数据对不上,并且还有重复的数据存在,问题如下
在这里插入图片描述
后端的代码是返回一个分页数据,其中出问题的是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进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注