Java json jackson编码-StackOverflower错误
我试图将java对象转换为json字符串,但由于StackOverflowerError而失败,可能是因为对象的子对象中存在有限循环/循环Java json jackson编码-StackOverflower错误,java,json,jackson,hl7-fhir,Java,Json,Jackson,Hl7 Fhir,我试图将java对象转换为json字符串,但由于StackOverflowerError而失败,可能是因为对象的子对象中存在有限循环/循环 at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152) at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanProper
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:505)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:639)
Caused by: java.lang.StackOverflowError
at java.lang.ClassLoader.defineClass1(Native Method)
...
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:655)
我试图编码的对象是一个我无法控制的类的实例。我只能对它进行子类化。我想我应该能够在有罪字段上添加@JsonIgnore
(我的意思是在相应的重写getter方法上),但我不知道它是哪一个。这些是包含数百个字段和子对象的大型类
有没有一种简单的方法可以知道是哪个字段导致json编码中的无限循环
PS:对于熟悉它的人来说,它是Hl7 HAPI FHIR框架的患者
类。我知道该框架附带了一个自定义json序列化器,但我需要使用更通用的jackson序列化器来利用它的一些特性
非常感谢如果对象图具有循环依赖关系,则会发生这种情况。据我所知,没有一种简单的方法可以找到周期。您可以@忽略所有内容,然后分批重新引入字段并查看它在哪里中断
如果您只是为了用@Ignore注释而进行子类化,那么您应该查看通常异常仍然应该包括包含图(通过该循环形成的属性的名称);这里不是这样吗?您大概有一个循环引用。检查对象是否有这些,然后从那里开始。是的,这就是我所说的“有限循环/循环”。但我的问题是如何在该实例的数百个字段和子对象中找到它:-)如果您不需要JSON,那么Java序列化将自己处理这个问题。如果您必须拥有JSON,那么您可能需要花一整天的时间来理解您要序列化的内容……我也有同样的问题,这是一个基本要求。很高兴知道这个问题是从哪里来的。(FHIR患者图中的什么使json序列化失败)(spring boot 2.3.4.版本)否:-(,我在问题中发布的堆栈的前3行重复了数百次。这很奇怪,因为
BeanSerializer
确实捕获了StackOverflowerError
,将其重新打包为映射异常,因此,尽管异常的深度可能很大,但第一行应该指示一些有关形成循环的属性的信息。确保使用最新版本(2.6.4是最新版本)。