jacksonJson序列化Map时指定Long序列化为String的实践

 更新时间:2026年01月17日 09:00:17   作者:t梧桐树t  
文章介绍了在前端接收Long类型数据时可能产生的经度问题,提出了在返回数据时将Long类型转换为String类型的方法,作者使用Jackson库并通过自定义SimpleModule来实现这一转换,此外,作者还讨论了在复杂情况下需要自定义序列化方法的场景,并分享了解决方案

问题

我们都知道前端接收Long类型的数据时会产生经度问题,一般我们会在向前端返回数据时将Long转为String类型,以jacksonJSON为例我们只需要在对应的属性值上添加如下注解就可以,但有时候我们需要将Map中的Long转为String类型

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

当然我们可以一劳永逸的解决这个问题,实现WebMvcConfigurer接口重写它的extendMessageConverters()方法来实现,但这毕竟是全局设置,有时候我们会遇到一些比较复杂的情况就需要自定义来实现,我遇到的问题就是需求与全局配置不能满足导致的,所以决定不经过springMVC的序列化,直接返回JSON,所以就有了以上的问题

测试

我们可以先看一下这个,直接转JSON的话是原封不动将Long还是转为了Long类型,如果我们这么返回前端就会出现经度问题

 public static void main(String[] args) throws JsonProcessingException {

        Map<String, Object> map = new HashMap<>();
        map.put("id", 1655876612393566210L);

        ObjectMapper mapper = new ObjectMapper();

        String json = mapper.writeValueAsString(map);
        System.out.println(json);
        //输出结果: {"id":1655876612393566210}
    }

方法

如下给它加工一下使用SimpleModule将指定Long类型转换为String类型,同理我们也可以对其他类型进行自定义转换

 public static void main(String[] args) throws JsonProcessingException {

        Map<String, Object> map = new HashMap<>();
        map.put("id", 1655876612393566210L);

        ObjectMapper mapper = new ObjectMapper();
        
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        mapper.registerModule(simpleModule);

        String json = mapper.writeValueAsString(map);
        System.out.println(json);
        //输出结果: {"id":"1655876612393566210"}
    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 一文读懂Spring Bean的生命周期

    一文读懂Spring Bean的生命周期

    今天我们来说一说 Spring Bean 的生命周期,小伙伴们应该在面试中经常遇到,这是正常现象,本文让更多的小伙伴们可以轻松的读懂 Spring Bean 的生命周期
    2023-03-03
  • java接口自动化测试框架及断言详解

    java接口自动化测试框架及断言详解

    这篇文章主要介绍了java接口自动化测试框架及断言详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 如何解决 Java 中的 IndexOutOfBoundsException 异常(最新推荐)

    如何解决 Java 中的 IndexOutOfBoundsException 异

    当我们在 Java 中使用 List 的时候,有时候会出现向 List 中不存在的位置设置新元素的情况,从而导致 IndexOutOfBoundsException 异常,本文将会介绍这个问题的产生原因以及解决方案
    2023-10-10
  • java实现斗地主游戏

    java实现斗地主游戏

    这篇文章主要为大家详细介绍了java实现斗地主游戏,洗牌、发牌、看牌,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • java 用递归获取一个目录下的所有文件路径的小例子

    java 用递归获取一个目录下的所有文件路径的小例子

    还是日志的问题,log4j生成的日志文件,自动保存到月份所在的文件夹中,需要获取到所有的日志文件,包括文件夹
    2013-09-09
  • mybatis多个接口参数的注解使用方式(@Param)

    mybatis多个接口参数的注解使用方式(@Param)

    这篇文章主要介绍了mybatis多个接口参数的注解使用方式(@Param),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • Springboot整合xxljob,自定义添加、修改、删除、停止、启动任务方式

    Springboot整合xxljob,自定义添加、修改、删除、停止、启动任务方式

    这篇文章主要介绍了Springboot整合xxljob,自定义添加、修改、删除、停止、启动任务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Springboot内嵌tomcat应用原理深入分析

    Springboot内嵌tomcat应用原理深入分析

    懂得SpringBoot的童鞋应该很清楚,不管应用程序是属于何种类型,都是一个Main方法走遍天下,对于web应用,只需要引入spring-boot-starter-web中这个依赖,应用程序就好像直接给我们来了个tomcat一样,对于嵌入式Tomcat,其实也非常简单,就是调用Tomcat提供的外部类
    2022-09-09
  • Java C++题解leetcode817链表组件示例

    Java C++题解leetcode817链表组件示例

    这篇文章主要为大家介绍了Java C++题解leetcode817链表组件示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 无法解析MVC视图的解决方案

    无法解析MVC视图的解决方案

    文章介绍了当idea无法解析MVC视图时的排查步骤,包括检查依赖和配置文件,特别强调了检查`template-loader-path`路径配置,确保ftl文件位于该路径下
    2026-01-01

最新评论