转换为 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.