Джексон: Как предотвратить рекурсивный вызов, только добавив поле ID в дочерние коллекции - PullRequest
1 голос
/ 23 сентября 2019

Я хотел упростить свой вопрос.У меня есть родительский и дочерний объект.

public class Parent {
  private String name;
  @OneToMany
  private List<Child> childs;
}

и

public class Child {
  private String name;
  @ManyToOne
  private Parent parent;
}

То, что я хочу сделать, - это когда я сериализую эти объекты, это должно понравиться.

{
  "parentList": [
    {
      "id": "1",
      "name": "parent",
      "childs": [
        {
          "id": "1",
          "name": "chiled",
          "parent" : "1"
        }
      ],
    }
  ]
}

и

{
  "childList": [
    {
      "id": "1",
      "name": "child",
      "parent": [
        {
          "id": "1",
          "name": "parent",
          "childs": [
            {
              "id": "1",
            }
        }
      ],
    }
  ]
}

Например:

Parent -> Child -> parentID
Child -> Parent -> childID

Если я обновлю свои сущности, как показано ниже.

public class Parent {
  private String name;
  @JsonIdentityReference(alwaysAsId = true)
  @OneToMany
  private List<Child> childs;
}

и

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class Child {
  private String name;
  @JsonIdentityReference(alwaysAsId = true)
  @ManyToOne
  private Parent parent;
}

С этой настройкой я получаю почти , что я хочу.

Child -> Parent -> ChildID (good)
Parent -> ChildID (bad)

Мне нужно, чтобы у Parent была целая сущность Child, и у этой сущности Child должен быть только parentID.Если я добавлю @JsonIdentityInfo к обеим сущностям, то результат будет выглядеть следующим образом:

Child -> parentID (bad)
Parent -> childID (bad)

Если я удаляю @JsonIdentityInfo из обеих, то у меня снова возникает рекурсивная проблема.

Незнаю, как получить то, что я хочу.

...