转换为 json 时杰克逊无限递归
Jackson infinite recursion when converting to json
尝试将具有以下结构的自定义对象 Tag
转换为 json 时,出现以下错误:java.lang.IllegalArgumentException: Infinite recursion
因为 getValueArray()
函数
public class Tag {
private String vr;
@JsonProperty("Value")
private JsonNode Value;
//getters and setters
public org.primefaces.model.TreeNode getValueArray() throws IOException
{
System.out.println("enter check");
TreeNode root = new DefaultTreeNode();
constructTree(Value, 1, root);
return root;
}
}
我有一个 Value
的 getter returns 字符串而不是 JsonNode(出于特定原因),我有这个 getValueArray
导致问题,Jackson
在转换为 json 而不是使用 getValue
时调用这个函数(我知道 enter check
被打印到控制台),实际上当我删除这个函数时它起作用了,对于一些它调用此函数并在其转换中使用返回的 TreeNode
的原因,我认为问题可能是它与 Jackson treeNode
混淆了,所以我返回 org.primefaces.model.TreeNode
让它认识到这是primefaces TreeNode
不是 Jackson TreeNode
,我什至不知道它为什么调用这个函数,以及如何解决这个问题。
错误说
java.lang.IllegalArgumentException: Infinite recursion (WhosebugError) (through reference chain: org.primefaces.model.DefaultTreeNode["parent"]->org.primefaces.model.DefaultTreeNode["children"]->org.primefaces.model.TreeNodeChildren[0]->org.primefaces.model.DefaultTreeNode["parent"]................. and so on
我找到了一个工作正常的变通方法,因为问题是 Jackson 在序列化中使用这个函数 getValueArray()
作为 getter,因为它的名字是 get something
,我使用
@JsonGetter("valueArray")
public JsonNode serializeValue()
{
return Value;
}
@JsonGetter("valueArray")
让我强制 Jackson 使用上述函数作为 getter 不存在的 属性 valueArray
return 值,现在是 jackson将不再使用 getValueArray()
函数作为 getter.
尝试将具有以下结构的自定义对象 Tag
转换为 json 时,出现以下错误:java.lang.IllegalArgumentException: Infinite recursion
因为 getValueArray()
函数
public class Tag {
private String vr;
@JsonProperty("Value")
private JsonNode Value;
//getters and setters
public org.primefaces.model.TreeNode getValueArray() throws IOException
{
System.out.println("enter check");
TreeNode root = new DefaultTreeNode();
constructTree(Value, 1, root);
return root;
}
}
我有一个 Value
的 getter returns 字符串而不是 JsonNode(出于特定原因),我有这个 getValueArray
导致问题,Jackson
在转换为 json 而不是使用 getValue
时调用这个函数(我知道 enter check
被打印到控制台),实际上当我删除这个函数时它起作用了,对于一些它调用此函数并在其转换中使用返回的 TreeNode
的原因,我认为问题可能是它与 Jackson treeNode
混淆了,所以我返回 org.primefaces.model.TreeNode
让它认识到这是primefaces TreeNode
不是 Jackson TreeNode
,我什至不知道它为什么调用这个函数,以及如何解决这个问题。
错误说
java.lang.IllegalArgumentException: Infinite recursion (WhosebugError) (through reference chain: org.primefaces.model.DefaultTreeNode["parent"]->org.primefaces.model.DefaultTreeNode["children"]->org.primefaces.model.TreeNodeChildren[0]->org.primefaces.model.DefaultTreeNode["parent"]................. and so on
我找到了一个工作正常的变通方法,因为问题是 Jackson 在序列化中使用这个函数 getValueArray()
作为 getter,因为它的名字是 get something
,我使用
@JsonGetter("valueArray")
public JsonNode serializeValue()
{
return Value;
}
@JsonGetter("valueArray")
让我强制 Jackson 使用上述函数作为 getter 不存在的 属性 valueArray
return 值,现在是 jackson将不再使用 getValueArray()
函数作为 getter.