Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java json jackson编码-StackOverflower错误_Java_Json_Jackson_Hl7 Fhir - Fatal编程技术网

Java json jackson编码-StackOverflower错误

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

我试图将java对象转换为json字符串,但由于StackOverflowerError而失败,可能是因为对象的子对象中存在有限循环/循环

    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是最新版本)。