当前位置: 首页 > news >正文

fastjson反序列化时_id的处理

写程序时,借助fastjson,将map对象转为json字符串,然后再通过json字符串转为对应的java对象

        Map<String, Object> map = value.asMap();String jsonString = JSON.toJSONString(map);System.out.println(jsonString);UserRealtion userRealtion = JSON.parseObject(jsonString, UserRealtion.class);

map转的json字符串如下

{"_type":"User","name":"lisi","_id":0,"id":1,"invite":[{"_type":"User","name":"wangwu","_id":77,"id":4,"invite":[{"_type":"User","name":"laoren","_id":43,"id":6}]},

转为java对象后,打印内容如下:

UserRealtion(id=0, name=lisi, invite=[UserRealtion(id=77, name=wangwu, invite=[UserRealtion(id=43, name=laoren, invite=null)]), UserRealtion(id=23, name=zhaosi, invite=null)])

 从输出看到,json字符串的_id转为了java对象属性的id,这不是想要的结果。于是,修改java对象,使用了@JSONField(alternateNames = {"id"})属性

package com.qfedu.microuser.user.service;import lombok.Data;import java.util.List;/*** @Classname UserRealtion* @Description TODO* @Date 2025-07-29 16:00* @Created by 老任与码*/
@Data
public class UserRealtion {// 父节点// @JSONField(name = "_id", alternateNames = {"id"})@JSONField(alternateNames = {"id"}) //不行private Integer id;private String name;// 子节点List<UserRealtion> invite;
}

结果转换后,结果还是不对,上网查了资料,当一个json存在id 和_id 的时候,使用JSONObject.parseObject进行序列号操作,映射错误_jsonobject.parseobject映射不上去-CSDN博客

这篇文章中也提到了这个问题,于是使用 @JSONField(name = "_id", alternateNames = {"id"})注解

package com.qfedu.microuser.user.service;import lombok.Data;import java.util.List;/*** @Classname UserRealtion* @Description TODO* @Date 2025-07-29 16:00* @Created by 老任与码*/
@Data
public class UserRealtion {// 父节点@JSONField(name = "_id", alternateNames = {"id"})private Integer id;private String name;// 子节点List<UserRealtion> invite;
}

转换后结果如下

UserRealtion(id=1, name=lisi, invite=[UserRealtion(id=4, name=wangwu, invite=[UserRealtion(id=6, name=laoren, invite=null)]), UserRealtion(id=5, name=zhaosi, invite=null)])

 可以看到,结果正确。

但是不太明白为什么name和alternateNames要一起指定,哪位大佬知道原因,还请告知一下。

http://www.lryc.cn/news/604115.html

相关文章:

  • WebRTC 2025全解析:从技术原理到商业落地
  • MC0241防火墙
  • 16大工程项目管理系统对比:开源与付费版本
  • 牛客网之华为机试题:密码验证程序
  • python-网络编程
  • Qt 移动应用性能优化策略
  • 板凳-------Mysql cookbook学习 (十二--------7)
  • Android User版本默认用test-keys,如何改用release-keys
  • 北方公司面试记录
  • 前端数据库:IndexedDB从基础到高级使用指南
  • 基于Prophet、滑动平均、加权平均的地铁客流量预测与可视化系统的设计与实现
  • Java【代码 17】httpclient PoolingHttpClientConnectionManager 连接池使用举例
  • 无穿戴动作捕捉技术:驱动历史活化、乐园叙事与教育沉浸的文旅利器
  • [Linux入门] Linux 部署本地 APT 仓库及 NFS 共享服务全攻略
  • 算法精讲:二分查找(一)—— 基础原理与实现
  • 7.28学习日志
  • ICT模拟零件测试方法--晶体管测试
  • 智能Agent场景实战指南 Day 23 : Agent安全与隐私保护
  • k8s搭建nfs共享存储
  • Ubuntu20.04安装和配置Samba实现Win11下共享文件夹
  • 工作中使用git可能遇到的场景
  • Leetcode 08 java
  • Linux笔记6——常用命令-5
  • 【核心技术一】Python异步编程深度解析
  • 基于springboot的零食商城的设计与实现/零食销售系统的设计与实现
  • 第2章 AB实验的关键问题
  • 全自动植树机solidwoeks图纸cad【7张】三维图+设计说明说
  • sqli-labs通关笔记-第25关GET字符注入(过滤or和and 脚本法)
  • QWebEngineProfile setCachePath无效
  • 对College数据进行多模型预测(R语言)