修复Long类型太长,而Java序列化JSON丢失精度问题的方法

Java序列化JSON时long型数值,会出现精度丢失的问题。
原因:
java中得long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值).
解决办法一:
使用ToStringSerializer的注解,让系统序列化
时,保留相关精度

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

上述方法需要在每个对象都配上该注解,此方法过于繁锁。

解决办法(二):
使用全局配置,将转换时实现自动ToStringSerializer序列化

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);
}

方法二比较完美,强烈推荐使用!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 早晨飘了一些毛毛雨,天灰着,午后又放晴了,她的心情也跟着愉快起来。 本来不想在晴天想起他,可是路上又遇到他骑着机车...
    徐翡阅读 380评论 0 1
  • 23岁,对很多人来讲,是一个朝气蓬勃的年华;而对有些人来说,是人生的十字路口,爱情和理想,向左还是向右。 ...
    最Q的蛋仔阅读 408评论 0 1
  • 前篇小文就像瓶子里的青蛙,前途光明,但如果不改变,出路不大的末尾曾经提到特斯拉的情况并且承诺要有一篇新的内容,今天...
    锦乡悦文房阅读 484评论 1 2
  • 十年前,绝杀殿 “孟家与吴家世代交好,如今孟家有难,我们绝杀殿不能坐视不管。况且孟公曾有恩于我吴风,这孟氏嫡子……...
    莫谜恋阅读 445评论 0 0
  • 孤月外,空楼下。 一箫一剑一棋局。 青灯阑珊,把酒与谁欢? 忆江湖,桀傲人生。 沉浮世间芳华,梦...
    半步棋局阅读 300评论 0 3