今天遇到一个小问题,我用fastjson,把一个map对象转为实体类对象返回给前端的时候,map对象里面的一个属性既然为null。

由于前端需求,我们需要返回一个json里面,有两个属性是一样的(都是从数据库查询出来相同的数据),Option和options都是同一个对象。

所以一开始,是只查询一次,然后分别put同一个对象进map里面,结果反序列化的时候,就出现了一个问题,Option是成功显示,optiond却为null。

然后我在后台打印发序列化之前的对象。对比一看

可以看出options只是引用了一个地址而已。这个引用地址,在fastjson反序列化的时候,就匹配不上类型,因此结果为null。找到问题之后,然后我尝试new另一个map出来,然后把旧的map用=号赋值过去。但是发现还是一个地址。这就不得不提一下深拷贝和浅拷贝的问题。如果我们想要拷贝一个对象,让它在内存中重新开辟出一个空间,那么就必须用深拷贝。深拷贝的东西这里就不复述太多,毕竟这不是教学博客,相当于是我记录bug的日志吧。

最后附上解决办法

    public static JSONObject getTableStyleData(ResList<IslandDataPackage> islandDataPackageResList, Map<String, String> communicationOptions) {
JSONObject styleData = JSONObject.parseObject(tableStyleData.toJSONString()); styleData.put("total", islandDataPackageResList.getTotal());
styleData.put("OverviewList", islandDataPackageResList.getData());
styleData.getJSONObject("ListHeader").getJSONObject("islandId").put("Option", communicationOptions);
int initSize =(int)(communicationOptions.size()/0.75)+1;
Map<String, String> copyMap = new HashMap<>(initSize);
copyMap.putAll(communicationOptions);
styleData.getJSONObject("searchFormData").getJSONObject("islandId").put("options", copyMap); return styleData;
}

由于我是事先查询出了communicationOptions,所以知道了它的长度。因此在深拷贝之前,可以指定新map的长度。

fastjson反序列化Map对象为null?其实它只是一个地址,试试Map深拷贝的更多相关文章

  1. Java 将两个Map对象合并为一个Map对象

    实现方式是通过 putAll() 方法将多个 map 对象中的数据放到另外一个全新的 map 对象中,代码如下所示,展示了两个 map 对象的合并,如果是多个 map 合并也是用这种方式. publi ...

  2. Map对象,Set对象使用(1)

    Map对象:包含所有类型.可以是对象,函数,或字符串等,本质上是键值对的集合 let m = new Map(); let keyarr = [1,23,"发广告"]; let k ...

  3. fastjson反序列化-JdbcRowSetImpl利用链

    fastjson反序列化-JdbcRowSetImpl利用链 JdbcRowSetImpl利用链 fastjson反序列化JdbcRowSetImpl - Afant1 - 博客园 (cnblogs. ...

  4. Struts标签<s:iterator>遍历访问复杂Map对象

    <s:iterator value="resultType" id="geneUi"> //拿到要遍历的Map对象 <s:iterator v ...

  5. TypeScript Map 对象

    TypeScript Map 对象 Map 对象保存键值对,并且能够记住键的原始插入顺序. 任何值(对象或者原始值) 都可以作为一个键或一个值. Map 是 ES6 中引入的一种新的数据结构,可以参考 ...

  6. Fastjson 序列化,反序列化Map对象排序问题(字符串转map,map转字符串)

    背景 记录项目中遇到的 关于fastjson jsonobject转string乱序,string转jsonObject乱序问题的解决方案 fastJson issues 问题来源描述参见: http ...

  7. FastJson实现复杂对象序列化与反序列化

    原文:http://blog.csdn.net/xqhadoop/article/details/62217954 一.认识FastJson 1.优势 fastjson是目前java语言中最快的jso ...

  8. Java基础/利用fastjson反序列化json为对象和对象数组

    利用fastjson反序列化json为对象和对象数组 利用 fastjosn 将 .json文件 反序列化为 java.class 和 java.util.List fastjson 是一个性能很好的 ...

  9. @JsonInclude注解,RestTemplate传输值为null的属性,利用FastJson将属性中有空值null的对象转化成Json字符串

    一个pojo类: import lombok.Data; @Data public class Friend { private String name; private int age; priva ...

  10. MessagePack Java 0.6.X List, Map 对象的序列化和反序列化

    为了序列化原生的容器对象例如  List 和 Map 对象,你必须使用 Template. Template 对象是 serializer 和 deserializer 的配对.例如,为了序列化一个  ...

随机推荐

  1. 【转载】Linux虚拟化KVM-Qemu分析(五)之内存虚拟化

    原文信息 作者:LoyenWang 出处:https://www.cnblogs.com/LoyenWang/ 公众号:LoyenWang 版权:本文版权归作者和博客园共有 转载:欢迎转载,但未经作者 ...

  2. clickhouse 与 zookeeper

    目录 clickhouse 设置中的 zookeeper 配置 参数说明 配置示例 [预发生产] ClickHouse Keeper 四字母命令 clickhouse 设置中的 zookeeper 配 ...

  3. 信创啊,信创。Solon 的 war 包,现在同时支持 jakarta.servlet(及 javax.servlet)容器了!

    Solon 是个神奇的项目,不是基于 Servlet 的.但是又很支持 Servlet,尤其是 war 包.打起来还挺方便的. 如果你是做信创的(听说,很多信创项目是用 war 部署到 tomcat ...

  4. TypeScript: 類型 'HTMLElement | null' 不可指派給類型 'HTMLElement'。 類型 'null' 不可指派給類型 'HTMLElement'

    报错截图 解决方案 在结尾添加叹号 // 获取页面中food的元素并将其赋值给element this.element = document.getElementById('food')!;

  5. 论文解读(SimGCL)《Are Graph Augmentations Necessary? Simple Graph Contrastive Learning for Recommendation》

    Note:[ wechat:Y466551 | 可加勿骚扰,付费咨询 ] 论文信息 论文标题:Are Graph Augmentations Necessary? Simple Graph Contr ...

  6. ❤️ GitHub Copilot 读心术揭秘,Copilot 逆向工程笔记

    总览 你是否好奇 GitHub Copilot 如何知道你想写的内容?有时候它聪明得甚至好像读过你项目里其他文件一样,不要怀疑,它确实读过.这篇文章记录了我阅读一个对 Copilot 的逆向工程的笔记 ...

  7. Programming abstractions in C阅读笔记:p123-p126

    <Programming Abstractions In C>学习第50天,p123-p126,总结如下: 一.技术总结 1.notaion 这也是一个在计算机相关书籍中出现的词,但有时却 ...

  8. [译]2023年 Web Coponent 现状

    本文为翻译 原文地址:2023 State of Web Components: Today's standards and a glimpse into the future. 最近,我写了关于如何 ...

  9. API接口的对接流程和注意事项

    ​ API接口的对接流程和注意事项 随着互联网技术的发展和数字化时代的到来,API接口已经成为应用程序之间进行数据交换和通信的重要方式.API即应用程序接口,是一种定义.调用和交互的规范,使得不同应用 ...

  10. 通过商品API接口获取到数据后的分析和应用

    一.如果你想要分析商品API接口获取到的数据,可以按照如下的步骤进行: 了解API接口返回值的格式,如JSON格式.XML格式.CSV格式等,选择适合你的数据分析方式. 使用API请求工具(如Post ...