zoukankan      html  css  js  c++  java
  • springmvc返回接口中long型,页面接收时值却变了

    Java序列化JSON时long型数值不准确 现象

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

    原因

    大致描述:java中得long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值).
    详情参考这里http://stackoverflow.com/questions/17320706/javascript-long-integer

    rest接口返回的json字符串中,数值还是对的.当js对json进行解析并转成js object的时候,出现了问题.

    解决方法

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

    [@Override](https://my.oschina.net/u/1162528)
    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);
    }
  • 相关阅读:
    gif&png&jpg&webp
    设计点滴&css效果点滴
    backbone点滴
    js自己总结的小东西(打印出来方便学习)
    nodejs点滴
    js类型
    mongo学亮的分享
    npm package.json中的dependencies和devDependencies的区别
    161130、Dubbo+SpringMVC工程创建详解
    161129、详解5种跨域方式及其原理
  • 原文地址:https://www.cnblogs.com/lendar/p/10509110.html
Copyright © 2011-2022 走看看