бесконечная рекурсия Джексона на классе узлов с собственной ссылкой - PullRequest
1 голос
/ 29 октября 2019

У меня проблема с использованием 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;

Ничто из того, что я смог найти, похоже, не помогает этому сценарию. Ценю любую помощь с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...