jackson – сериализация сущностей с двунаправленными отношениями (избегая циклов)

У меня есть два объекта:

Parent { Child[] children; } and Child { Parent parent; } 

Я знаю о @JsonBackReference и @JsonManagedReference . Они хороши, если я сериализую примеры Parent .

Но мне также нужно передать экземпляры Child и я хочу, чтобы parent поле заполнялось.

Другими словами:

  1. При сериализации Parent него должны быть children но их родительское поле может быть пустым (может быть разрешено с помощью аннотаций json).
  2. При сериализации Child него должен быть parent со своими children (но children не нужно иметь parent .

Есть ли способ решить эту проблему, используя стандартные возможности jacksonа?

Т.е. пропустить сериализацию объектов, которые уже были сериализованы, вместо того, чтобы маркировать поля, имеющие право или не имеющие права на сериализацию.

Jackson 2.0 поддерживает все циклические ссылки на объекты. См. « jackson 2.0 выпущен » (раздел «Обрабатывать любые графические объекты, даже циклические!») Для примера.

В принципе, вам нужно будет использовать новый @JsonIdentityInfo для типов, для которых требуется обработка стиля id / idref. В вашем случае это будут как Parent и Child типы (если один расширяет другой, просто добавьте его в супер-тип, и это нормально).

очень удобная реализация интерфейса предоставляется в библиотеке jackson 2 как

 @Entity @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") public class Parent { .... @Entity @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") public class Child { .... 

в maven

  com.fasterxml.jackson.core jackson-core 2.0.2  

@StaxMan предоставил хорошую ссылку для начала

Давайте будем гением компьютера.