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

Lombok @Accessors(chain = true) 导致 FastJson parsObject()对父类属性失效

我们在项目中经常会用到lombok工具对POJO类进行简化,但不可避免的存在父类和子类的设计,并且会对父类和子类进行序列化和反序列化,今天遇到了一个问题,序列化的json字符串转化为子类对象时无法获取到父类属性值,对象中所有父类属性均为空值或默认值,很是奇怪,代码如下:

父类:People

	@Accessors(chain = true)@Data@ToString(callSuper=true)@EqualsAndHashCode(callSuper=false)public static class People{private String name;private Integer age;private String desc;}

子类:Student

	@Accessors(chain = true)@Data@ToString(callSuper=true)@EqualsAndHashCode(callSuper=true)@NoArgsConstructorpublic static class Student extends People{private String nickName;private int classNo;}

序列化和反序列代码如下:

public static void main(String[] args) {Student student=new Student();student.setAge(20);student.setName("jacky");student.setNickName("BIG BOY");student.setClassNo(100);student.setDesc("He is a 20 years old boy.");String json = JSON.toJSONString(student);if(json!=null) {System.out.println(json);}Student student2=JSON.parseObject(json, Student.class);System.out.println("His name is " + student2.getName() +",age : " + student2.getAge()+ ", Class NO : "+student2.getClassNo()+",desc : "+student2.getDesc() );}

运行结果如下:

{"age":20,"classNo":100,"desc":"He is a 20 years old boy.","name":"jacky","nickName":"BIG BOY"}
His name is null,age : null, Class NO : 100,desc : null
从以上运行结果可看出,子类Student分别设对父类属性name,age,和desc进行了赋值,转为json串时,没有问题,但是从json串转为对象出现了非预期的结果,从网上找的结果来看,说是要增加

@EqualsAndHashCode(callSuper = true)

@ToString(callSuper = true) 

或者增加无参构造函数,或者增加@NoArgsConstructor注解,但在我这全都无效

经过各种排查(.....)发现是因为@Accessors(chain = true) 多了这个注解造成的,将其去掉,JSON.parseObject执行后,父类属性都可正常获得,问题得到解决

新的运行结果如下:

{"age":20,"classNo":100,"desc":"He is a 20 years old boy.","name":"jacky","nickName":"BIG BOY"}
His name is jacky,age : 20, Class NO : 100,desc : He is a 20 years old boy.

关于lombok @Accessors(chain = true) 链式编程资料有很多,初步分析这个可能是该工具的一个bug,所以请大家注意下,特此分享,未经深入分析;另外如果去掉该注解,很多基于该POJO的链式编码的判断逻辑可能都要做一些特别处理

本项目的lombok版本:1.18.12 fastjson版本:1.1.41

<properties><lombok.version>1.18.10</lombok.version>
</properties><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.1.41</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
</dependencies>

可能下面的作者分析有一些思路:

@Accessors(chain = true)导致BeanUtils.copyProperties失效问题的排查思路_@accessors(chain=true)-CSDN博客

关于lombok介绍:极简代码神器:Lombok使用教程

https://www.cnblogs.com/javazhiyin/p/11271811.html

相关文章:

Lombok @Accessors(chain = true) 导致 FastJson parsObject()对父类属性失效

我们在项目中经常会用到lombok工具对POJO类进行简化,但不可避免的存在父类和子类的设计,并且会对父类和子类进行序列化和反序列化,今天遇到了一个问题,序列化的json字符串转化为子类对象时无法获取到父类属性值,对象中所有父类属性均为空值或默认值,很是奇怪,代码如下: 父类:P…...

Aztec交易架构解析

1. 引言 前序博客有&#xff1a; Aztec的隐私抽象&#xff1a;在尊重EVM合约开发习惯的情况下实现智能合约隐私完全保密的以太坊交易&#xff1a;Aztec网络的隐私架构Aztec.nr&#xff1a;Aztec的隐私智能合约框架——用Noir扩展智能合约功能Account Abstraction账号抽象——…...

商品秒杀系统整理

1、使用redis缓存商品信息 2、互斥锁解决缓存击穿问题&#xff0c;用缓存空值解决缓存穿透问题。 3、CAS乐观锁解决秒杀超卖的问题 4、使用redission实现一人一单。&#xff08;分布式锁lua&#xff09;脚本。 5、使用lua脚本进行秒杀资格判断&#xff08;将库存和用户下单…...

C语言实现八种功能的通讯录(添加、删除、查找、修改、显示、排序、退出、清空)

通讯录功能概要及前提说明 此通讯录利用C语言完成&#xff0c;可以实现八种功能的通讯录&#xff08;添加、删除、查找、修改、显示、排序、退出、清空&#xff09; 代码由三部分组成&#xff0c;为什么要写成三部分而不写成一部分可以参考我以前的博客&#xff0c;如下&…...

视频监控/视频汇聚/安防视频监控平台EasyCVR配置集群后有一台显示离线是什么原因?

开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多…...

【RabbitMQ实战】02 生产者和消费者示例

在上一节中&#xff0c;我们使用docker部署了RabbitMQ&#xff0c;这一节我们将写一段生产者和消费者的代码。将用到rabbitmq的原生API来进行生产和发送消息。 一、准备工作 开始前&#xff0c;我们先在RabbitMQ控制台建相好关的数据 本机的RabbitMQ部署机器是192.168.56.201…...

Linux下ThinkPHP5实现定时器任务 - 结合crontab

实例一&#xff1a; 1.在/application/command创建要配置的PHP类文件&#xff0c;需要继承Command类&#xff0c;并重写configure和execute两个方法&#xff0c;例如: <?php namespace app\command; use think\console\Command; use think\console\Input; use think\cons…...

3dsmax模型烘焙光照贴图并导入unity流程详解

目录 前言 软件环境 前置知识储备 一、模型场景搭建 二、模型材质处理 三、vray渲染准备 四、烘焙至贴图 五、unity场景准备 六、贴图与材质 前言 该流程针对某些固定场景&#xff08;模型发布、无法使用实时渲染引擎等&#xff09;情况下的展示&#xff0c;本文记录烘…...

安卓生成公钥和md5签名

安卓公钥和md5证书签名 大家好&#xff0c;最近需要备案app&#xff0c;用到了公钥和md5&#xff0c;MD5签名我倒是知道&#xff0c;然而对于公钥却一下子不知道了&#xff0c; 现在我讲一下我的流程。 首先是md5证书签名的查看&#xff0c; 生成了apk和签名.jks后&…...

pwndbg安装(gdb插件)

pwndbg安装&#xff08;gdb插件&#xff09; 源地址&#xff1a;https://github.com/pwndbg/pwndbg 手动安装 git clone https://github.com/pwndbg/pwndbg cd pwndbg ./setup.sh 没啥问题运行gdb的话就可以看到明显的不同了 如果安装成功了&#xff0c;但没有生效 如果有问…...

SpringBoot 学习(二)配置

2. SpringBoot 配置 2.1 配置文件类型 配置文件用于修改 SpringBoot 的默认配置。 2.1.1 properties 文件 **properties ** 是属性文件后缀。 文件名&#xff1a;application.properties 只能保存键值对。 基础语法&#xff1a;keyvalue namewhy注入配置类 Component //…...

西门子828d授权密钥破解经验分享 I7I54833762

操作数组的方法 Array.prototype.toSorted(compareFn) //返回一个新数组&#xff0c;其中元素按升序排序&#xff0c;而不改变原始数组。 Array.prototype.toReversed() //返回一个新数组&#xff0c;该数组的元素顺序被反转&#xff0c;但不改变原始数组。 Array.prototype.to…...

06贪心:跳跃游戏

06贪心&#xff1a;跳跃游戏 55. 跳跃游戏 刚看到本题一开始可能想&#xff1a;当前位置元素如果是 3&#xff0c;我究竟是跳一步呢&#xff0c;还是两步呢&#xff0c;还是三步呢&#xff0c;究竟跳几步才是最优呢&#xff1f; 其实跳几步无所谓&#xff0c;关键在于可跳的…...

鄙视测试,理解测试,成为测试

首先&#xff0c;其实题主的问题还是很实诚的&#xff0c;我刚开始做测试的时候其实也是这个心态&#xff0c;想转开发&#xff0c;也学习了很多的语言&#xff0c;个人觉得这是职业危机感的表现&#xff0c;挺好的&#xff0c;也相信题主不管去做开发和测试都会去不断的学习和…...

MySQL数据库基础知识要点总结

目录 前言 一.数据库构成 1.1 表 1.2 关系 1.3 索引 1.4 查询语言 1.5 数据库管理系统 二.数据类型 2.1 整数 2.2 浮点 2.3 日期与时间 2.4 字符串 三.约束条件 3.1 主键约束 3.2 唯一约束 3.3 外键约束 3.4 非空约束 3.5 默认值约束 总结 前言 数据库是…...

基础运维(一)YUM仓库

一 自定义YUM仓库 1 Yum仓库特点 作为yum源需要准备的内容 大量的rpm 软件安装包文件针对这些软件包的 repodata/ 仓库档案 repodata/ 仓库档案数据 filelists.xml.gz // 软件包的文件安装清单primary.xml.gz // 软件包的基本/主要信息other.xml.gz // 软件包…...

递归算法讲解,深度理解递归

首先最重要的就是要说明递归思想的作用&#xff0c;在后面学习的高级数据接口&#xff0c;树和图中&#xff0c;都需要用到递归&#xff0c;即深度优先搜索&#xff0c;如果递归掌握的不好&#xff0c;后面的数据结构将举步为艰。 加油 首先看下如何下面两个方法有什么区别&a…...

网络通信(套接字通信)(C/C++)

1.网络编程必知概念 1.广域网和局域网 广域网:又称外网、公网。是连接不同地区局域网或城域网进行计算机通信的远程公共网络。 局域网:在一定的通信范围内,有很个多计算机组成的私有网络就叫局域网。(这些计算机相互之间是可以通信的,但是不能直接访问外网(可以通过网线…...

anaconda navigator启动时一直卡在 loading applications 页面

anaconda navigator启动时一直卡在 loading applications 页面 方法1 在安装目录找到D:\anaconda\Lib\site-packages\anaconda_navigator\api 然后打开conda_api.py&#xff0c; 在1358行找到data yaml.load(f)&#xff0c;将其改为data yaml.safeload(f) 猜测为保证代码…...

力扣刷题-链表-删除链表的倒数第N个节点

19.删除链表的倒数第N个节点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a;输入&#xff1a;head [1], n 1 输出&…...

3个方法突破访问限制:Bypass Paywalls Clean让优质内容触手可及

3个方法突破访问限制&#xff1a;Bypass Paywalls Clean让优质内容触手可及 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 当一位医学研究员在凌晨三点急需查阅最新临床研究&#xf…...

别再只盯着芯片手册了!用CC6902SO搭建电流检测电路,这些实测数据和避坑经验更重要

别再只盯着芯片手册了&#xff01;用CC6902SO搭建电流检测电路&#xff0c;这些实测数据和避坑经验更重要 第一次用CC6902SO搭建电流检测电路时&#xff0c;我完全按照芯片手册推荐的电路设计&#xff0c;结果发现实际输出和理论值差了将近15%。这让我意识到&#xff0c;真正影…...

3个跨设备游戏自由:Sunshine如何用开源技术打造无缝串流体验

3个跨设备游戏自由&#xff1a;Sunshine如何用开源技术打造无缝串流体验 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 在数字娱乐多元化的今天&#xff0c;游戏玩家常面临高性能…...

Hotkey Detective:Windows热键冲突终极诊断指南

Hotkey Detective&#xff1a;Windows热键冲突终极诊断指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否曾经遇到…...

windows 下使用 arthas 排查接口慢的问题

文章目录1、windows 如何安装 arthas2、在排查问题之前&#xff0c;先启动 arthas3、排查某个慢接口&方法4、更多功能参考官网文档1、windows 如何安装 arthas 进入 https://github.com/alibaba/arthas/releases&#xff0c;点击 arthas-bin.zip 进行下载。 解压下载完成后…...

2025年11月一区SCI-壁虎优化算法Gekko Japonicus Algorithm-附Matlab免费代码

引言 近年来&#xff0c;在合理框架内求解优化问题的元启发式算法的发展引起了全球科学界的极大关注。本期介绍一种新的创新算法——壁虎优化算法Gekko Japonicus Algorithm&#xff0c;GJA。该算法的灵感主要来自于壁虎的捕食策略和生存行为。通过模拟壁虎的混合运动模式、定…...

长上下文与RAG

读到一篇探讨RAG技术的文章&#xff0c;很受用&#xff0c;遂记录一下。核心结论&#xff1a;RAG不会被无限上下文取代。 原文地址&#xff1a;LLM无限上下文了&#xff0c;RAG&#xff08;Retrieval Augmented Generation&#xff09;还有意义吗&#xff1f; - 今日头条 以下…...

基于Comsol相控阵技术的实用钢纵波超声波成像模型:单层缺陷TFM成像与压力声学仿真

comsol 相控阵 超声成像 此模型为压力声学仿真超声波&#xff0c;实用钢纵波速度6000 密度7.8e-9 单层缺陷TFM成像相控阵超声检测这玩意儿在工业NDT圈子里算是老熟人了&#xff0c;今天咱们拿COMSOL搞个钢材料缺陷成像的骚操作。模型基础是压力声学模块&#xff0c;材料参数先给…...

7大维度测评:2023年开源付费墙绕过工具终极选择指南

7大维度测评&#xff1a;2023年开源付费墙绕过工具终极选择指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在数字内容访问需求日益增长的今天&#xff0c;选择一款高效可靠的开源…...

Spring Boot 实现网络限速:让流量“收放自如”

Spring Boot 实现网络限速&#xff1a;让流量“收放自如” 一、为啥要网络限速&#xff1f; 在当今这个数字化时代&#xff0c;网络服务就像我们生活中的水电一样不可或缺&#xff0c;而网络限速则是保障这些服务稳定、高效运行的关键一环。它能确保在各种复杂的网络环境下&…...