首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

让jackson序列化apache commons对

象的时候,为什么会出现StackOverflowError?

在进行Jackson序列化时,如果涉及到Apache Commons对象,可能会出现StackOverflowError的错误。这是因为Apache Commons中的某些对象存在循环引用的情况,而Jackson在序列化时会尝试递归地遍历对象的所有属性,导致无限循环,最终导致堆栈溢出。

StackOverflowError是Java虚拟机抛出的错误之一,表示方法调用的堆栈深度超过了虚拟机所允许的最大深度。当递归调用过程中没有适当的终止条件或者终止条件设置不正确时,就会出现这个错误。

为了解决这个问题,可以采取以下几种方法:

  1. 使用@JsonManagedReference和@JsonBackReference注解:这两个注解可以用于解决循环引用的问题。@JsonManagedReference注解用于标记父对象中的属性,@JsonBackReference注解用于标记子对象中的属性。这样,在序列化时,Jackson会忽略@JsonBackReference注解标记的属性,避免循环引用。
  2. 使用@JsonIdentityInfo注解:这个注解可以用于解决循环引用的问题。通过设置@JsonIdentityInfo注解的generator属性为ObjectIdGenerators.PropertyGenerator.class,然后在需要引用的地方使用@JsonIdentityReference注解,Jackson会将对象序列化为一个带有id的JSON对象,避免循环引用。
  3. 使用@JsonSerialize和@JsonDeserialize注解:这两个注解可以用于自定义序列化和反序列化过程。通过自定义序列化和反序列化逻辑,可以避免循环引用的问题。
  4. 避免使用Apache Commons中可能存在循环引用的对象:如果可能的话,可以尝试避免使用Apache Commons中可能存在循环引用的对象,或者对这些对象进行适当的处理,避免循环引用。

总结起来,解决Jackson序列化Apache Commons对象出现StackOverflowError的方法主要包括使用注解解决循环引用问题,自定义序列化和反序列化逻辑,以及避免使用可能存在循环引用的对象。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 漏洞情报|Jackson-databind反序列化漏洞风险通告(CVE-2020-35490,CVE-2020-35491)

    2020年12月18日,腾讯云安全运营中心监测到,FasterXML Jackson-databind官方发布安全通告,披露Jackson-databind < 2.9.10.8存在反序列化远程代码执行漏洞...据官方描述,Jackson-databind存在一处新的反序列化远程代码执行漏洞(CVE-2020-35790/CVE-2020-35491),该漏洞是由于org.apache.commons.dbcp2....datasources.PerUserPoolDataSource和org.apache.commons.dbcp2.datasources.SharedPoolDataSource 组件库存在不安全的反序列化...云防火墙规则库日期2020-12-18之后的版本,已支持Jackson-databind反序列化漏洞利用进行检测和拦截,腾讯云防火墙内置的入侵防御功能,使用虚拟补丁机制防御最新的漏洞利用; - 腾讯...T-Sec Web应用防火墙(WAF)已支持拦截Jackson-databind反序列化漏洞(CVE-2020-35490/CVE-2020-35491) 漏洞参考 https://github.com

    1.9K20

    CVE-2019-12086:jackson序列化读取文件

    影响范围 Jackson 2.x系列 < 2.9.9 漏洞类型 反序列化导致任意文件读取 利用条件 开启Default Typing 目标环境中存在8.0.14版本以下的MySQL驱动,即mysql-connector-java...版本 < 8.0.14 漏洞概述 在开启DefaultTyping的情况下,jackson在反序列化json时,可以指定反序列化类,且可以指定一个基础类型的值作为这个类的构造函数的参数的值。...的修复: 从2.9.9版本开始,Jackson将”com.mysql.cj.jdbc.admin.MiniAdmin”加入到反序列化黑名单中: static { Set<String..."); s.add("org.apache.commons.collections.functors.InstantiateTransformer"); s.add("org.apache.commons.collections4....functors.InvokerTransformer"); s.add("org.apache.commons.collections4.functors.InstantiateTransformer

    1.3K10

    【快学SpringBoot】过滤XSS脚本攻击(包括json格式)

    如何避免XSS攻击 解决XSS攻击,可以通过后端输入的数据做过滤或者转义,使XSS攻击代码失效。 代码实现 对于过滤XSS脚本的代码,通过搜索引擎可以搜索到很多,但似乎都不是那么全面。...下面就直接贴代码了: 新建XssAndSqlHttpServletRequestWrapper.java import org.apache.commons.lang3.StringUtils; import...org.apache.commons.text.StringEscapeUtils; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper...StringEscapeUtils.escapeHtml4这个方法来自Apache的工具类,maven坐标如下: org.apache.commons</groupId...; import org.apache.commons.text.StringEscapeUtils; import java.io.IOException; public class XssStringJsonSerializer

    4K21

    Spring Boot升级到2.x,JacksonDate时间类型序列化的变化差点项目暴雷【享学Spring Boot】

    它的大背景是项目需要从Spring Boot1.x升级到2.x版本,升上去之后由于Jackson对时间类型序列化的变化,使得多个项目险些暴雷,幸好本人Jackson很了解所以迅速定位并且解决问题,及时止损...本文的关注点是Spring Boot不同大版本下Jackson对日期/时间类型的序列化问题。据我调查和了解,该问题也是很多同学的痛点,所以相信本文能帮助到你避免采坑。...2.x版本JDK的最低要求是JDK8,所以默认就给你带上这三个常用模块是完全合理的 1.x使用的Jackson版本号是:2.8.11.3;2.x使用的Jackson版本号是2.9.4;版本差异上并不大...Spring MVC),对于Rest接口,默认会使用Jackson进行消息的序列化。...1.x并没有Jackson默认行为做更改,而自2.0.0.RELEASE版本起,Spring Boot默认把此特征值给置为fasle了。小小改动,巨大能量,险些我项目暴雷。

    4.3K41
    领券