Java 具有自引用的节点类上的jackson无限递归
我在一个类上使用jackson writeValueAsString时遇到了一个问题,该类作为一个节点类,始终引用父类和子类Java 具有自引用的节点类上的jackson无限递归,java,json,tree,jackson,Java,Json,Tree,Jackson,我在一个类上使用jackson writeValueAsString时遇到了一个问题,该类作为一个节点类,始终引用父类和子类 public Node<T>{ private T key; private List<Node<T>> children; private Node<T> parent; } 在我的业务逻辑中,这一切都很好,但我希望输出json 我在地图上有以下设置 ObjectMapper mappe
public Node<T>{
private T key;
private List<Node<T>> children;
private Node<T> parent;
}
在我的业务逻辑中,这一切都很好,但我希望输出json
我在地图上有以下设置
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_SELF_REFERENCES, false);
String json = "";
try {
json = mapper.writeValueAsString(nodeImpl);
} catch (Exception ex) {
// logging
}
return json;
由于这个对象,我得到了无限递归错误
com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: io.tychon.common.model.Node["children"]->java.util.ArrayList[0]->io.moobyworld.model....
因此,我尝试添加
@JsonManagedReference
private Node<T> parent;
@JsonBackReference
private List<Node<T>> children;
@JsonManagedReference
私有节点父节点;
@JsonBackReference
私人名单儿童;
没有帮助,所以我尝试切换托管引用和反向引用,因为子对象是一个集合。我甚至不需要json中的parent属性,所以我也尝试了
@JsonIgnore
private Node<T> parent;
@JsonIgnore
私有节点父节点;
我所能找到的似乎都无助于这种情况。非常感谢您的帮助 您使用的是哪个版本的
Jackson
?您能否创建一个不适合您的简单示例?我只使用了一个注释@JsonBackReference private Node parent
版本为2.9.9
,运行良好:{“key”:“ROOT”,“children”:[{“key”:“C0”,“children”:[]},{“key”:“C1”,“children”:[]}]}
2.10…我在父节点上尝试了该注释,但仍然会产生相同的错误?您能创建一个简单的节点结构并尝试一下吗?也许你使用了一些复杂的类型,这就是为什么它不适合你。
@JsonIgnore
private Node<T> parent;