jacksonJson序列化Map时指定Long序列化为String的实践
问题
我们都知道前端接收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"}
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
如何解决 Java 中的 IndexOutOfBoundsException 异
当我们在 Java 中使用 List 的时候,有时候会出现向 List 中不存在的位置设置新元素的情况,从而导致 IndexOutOfBoundsException 异常,本文将会介绍这个问题的产生原因以及解决方案2023-10-10
Springboot整合xxljob,自定义添加、修改、删除、停止、启动任务方式
这篇文章主要介绍了Springboot整合xxljob,自定义添加、修改、删除、停止、启动任务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2025-04-04


最新评论