fastjson/jackson对getter,setter和constructor的区分

在复现完fastjson1.2.24-1.2.80和jackson的所有相关漏洞后,总结的一些规则

以下均指对json的反序列化过程

setter

fastjson调用setter:遍历所有方法,找出所有满足setter要求的方法,再根据传入的json去反射调用

jackson调用setter:直接对传入的json中的字段拼接上set,然后去取setter

其实二者一样,但是fastjson不能调用私有和受保护setter,而jackson可以

getter

fastjson调用getter:

1、没有setter方法,有getter方法。且getter满足:参数长度为0,返回类型是属于Collection 或其子类、Map 或其子类、AtomicBoolean、AtomicInteger、AtomicLong的一种

2、fastjson>=1.2.36 可用$ref调用getter

解析函数里有JSON.toJSON,还会调用getter(parseObject)

jackson调用getter:

1、没有setter,有getter方法。可以直接反序列化调用

2、jackson-databind&core&annotations>=2.13.3,通过POJONode调用getter

构造方法

fastjson调用构造方法:

  • 如果存在无参构造方法,则将其作为构造方法
  • 否则使用参数数量最多且排在最前面的构造方法。

jackson调用构造方法:

  • 按照顺序,如果有参构造的参数能对应上,直接调用
相关推荐
衍生星球7 分钟前
【Java 语言】— 面向对象:构造方法(无参、有参构造)
java·开发语言
SimonKing9 分钟前
素笺( local-notes)全面优化,新增功能体验不一样的笔记
java·后端·程序员
techpupil10 分钟前
IDEA基础配置及开发基础插件
java·ide·intellij-idea
yuniko-n15 分钟前
【JVM】对象内存布局
java·开发语言·jvm
CoderYanger21 分钟前
Java EE 进阶:6.SpringBoot 配置文件(第二弹)
java·spring boot·spring·面试·职场和发展·java-ee·程序员创富
文丑颜不良啊23 分钟前
LeetCode1681~1700题目解析
java·leetcode
愚农搬码27 分钟前
电子表单、动态表单、表单设计器和表单引擎到底有什么区别?
java·后端
CarIise30 分钟前
Spring 框架AOP与 XML 基础
java·开发语言
m0_6399069435 分钟前
SpringBoot 实现大模型统一调度网关|对接 OpenAI、Claude 协议差异与适配方案
java·spring boot·spring
雪芽蓝域zzs36 分钟前
第 1 章:IDEA 全局配置 Maven + 新建 SpringBoot3 Maven 项目
java·maven·intellij-idea