У меня проблема с использованием jackson writeValueAsString в классе, который действует как класс узла со ссылками на родительский и дочерний элементы.
public Node<T>{
private T key;
private List<Node<T>> children;
private Node<T> parent;
}
, когда я его конструирую, он становится иерархической структуройэти объекты узла со ссылками на его относительных потомков на каждом слое, но также со ссылкой на родителя.
Node@111:
children:
Node@222:
children:
Node@333: children
...etc
parent:
Node@222
parent: Node@111
все это прекрасно работает в моей бизнес-логике, но я хотел бы вывести 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;
не помогло, поэтому я попытался переключить управляемые и обратные ссылки, так как дети - это коллекция. Мне даже не нужно родительское свойство в json, поэтому я также попытался
@JsonIgnore
private Node<T> parent;
Ничто из того, что я смог найти, похоже, не помогает этому сценарию. Ценю любую помощь с этим.