Java序列化Long类型数据到前端数据失真

Java序列化Long类型数据到前端数据失真

现象
项目中用到了唯一ID生成器.生成出的ID是long型的(比如说4616189619433466044).
通过某个rest接口中返回json数据后,发现浏览器解析完变成了4616189619433466000.

原因
大致描述:java中得long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值).

解决方法
方法就是不用number来保存long值,而是使用string.可以在客户端js修改,
也可以在服务端序列化的时候修改.

方案1:

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
//序列化成String的传

 @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

方案1:

@Configuration
public class WebAppConfig 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);
    }

}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 35,288评论 18赞 399
  • 今天参加了季老师的第三期学思行智慧父母,收获良多,启发很大,季老师辛苦了,感谢季老师平时对陶小宝的关注,让他进步很...
    Bluesky0810阅读 146评论 0赞 1
  • 昨天,下班比较晚,老板请我们去吃特色鲜牛肉,(这家牛肉店,每天生意出奇的好,都是纯正鲜牛肉,每天就那么多分量,去晚...
    梨逍遥阅读 663评论 0赞 0
  • 老师,我们记得您 文/诗缘 三尺讲台 学生走了一茬又一茬 当年的祖国花朵 现都己成为栋楼之材 如今的您 黑发变白 ...
    蒋水敏阅读 215评论 0赞 6
  • 乖儿的抵抗力比较差,每逢天气突变的时候,要命的过敏性鼻炎就发作了;不停地打喷嚏,不停地流清鼻涕,反复发作,经常一整...
    周琦橞阅读 651评论 19赞 17

友情链接更多精彩内容