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"}
    }

总结

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

相关文章

  • 你应该知道的21个Java核心技术

    你应该知道的21个Java核心技术

    Java的21个核心技术点,你知道吗?这篇文章主要为大家详细介绍了Java核心技术,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • java web用servlet监听器实现显示在线人数

    java web用servlet监听器实现显示在线人数

    这篇文章主要为大家详细介绍了java web用servlet监听器实现显示在线人数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Java 通过JDBC连接Mysql数据库

    Java 通过JDBC连接Mysql数据库

    本文给大家详细介绍了java如何使用JDBC连接Mysql的方法以及驱动包的安装,最后给大家附上了java通过JDBC连接其他各种数据库的方法,有需要的小伙伴可以参考下。
    2015-11-11
  • Java深入讲解Object类常用方法的使用

    Java深入讲解Object类常用方法的使用

    前面java继承中说到的Object类是java中一个特殊的类,所有的类都是直接或者间接的继承自Object类,即如果某个类没有使用extends关键字则默认是java.lang.Object类的子类,所以所有的类都可以使用Object类中定义的方法,下面介绍Object类的常用方法
    2022-04-04
  • springboot整合rabbitmq的示例代码

    springboot整合rabbitmq的示例代码

    本篇文章主要介绍了springboot整合rabbitmq的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • 用Java轻松读取Word文档内容的常用方法

    用Java轻松读取Word文档内容的常用方法

    这篇文章主要介绍了用Java轻松读取Word文档内容的常用方法,对于doc格式使用Apache POI库中的HWPFDocument和WordExtractor类,对于docx格式使用XWPFDocument类,并通过遍历段落和文本运行对象来提取文本内容,需要的朋友可以参考下
    2025-03-03
  • Spring MVC Mybatis多数据源的使用实例解析

    Spring MVC Mybatis多数据源的使用实例解析

    项目需要从其他网站获取数据,因为是临时加的需求,这篇文章主要介绍了Spring MVC Mybatis多数据源的使用实例解析,需要的朋友可以参考下
    2016-12-12
  • 详解SpringBoot是如何整合SpringDataRedis的?

    详解SpringBoot是如何整合SpringDataRedis的?

    今天给大家带来的是关于Java的相关知识,文章围绕着SpringBoot是如何整合SpringDataRedis展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Java 集合框架之List 的使用(附小游戏练习)

    Java 集合框架之List 的使用(附小游戏练习)

    这篇文章主要介绍Java 集合框架中List 的使用,下面文章将围绕Java 集合框架中List 的使用展开话题,并附上一些小游戏练习,需要的朋友可以参考一下
    2021-10-10
  • Mybatis如何获取最新插入数据的id

    Mybatis如何获取最新插入数据的id

    这篇文章主要介绍了Mybatis如何获取最新插入数据的id,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01

最新评论