42

Вопрос по json, java – Джексон - сериализация сущностей с двунаправленными отношениями (избегая циклов)

У меня есть две сущности:

Parent {
   Child[] children;
}

and 

Child {
   Parent parent;
}

Я знаю о@JsonBackReference а также@JsonManagedReference. They are good, if I'm serializing instances of Parent.

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

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

  1. On serialization of Parent it should have children but their parent field might be empty (can be solved by using json reference annotations).
  2. On serialization of Child it should have parent with their children (but children don't have to have parent populated.

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

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

  • У меня похожая проблема, но безуспешно после попытки решить эту проблему:stackoverflow.com/q/36809325/3300911

    от
  • Довольно свежий выпуск. Требуется какое-то перемещение пакета. Хорошо, я проверю это.

    от Eugene Retunsky
  • Круто - рад, что это сработало как задумано!

    от
  • Да, это большое обновление. Но сама функция тоже большая. :-)

    от
  • Работает как заявлено. Отличное обновление.

    от Eugene Retunsky
  • не помогает с отображением спящего режима

    от
  • Эта ссылка описывает несколько дополнительных деталей:github.com/FasterXML/jackson-docs/wiki/Presentation-Jackson-2.0

    от
  • Замечания:wiki.fasterxml.com теперь мертвая ссылка

    от
  • дальнейшее поддерживающее чтениеwiki.fasterxml.com/JacksonFeatureObjectIdentity

    от
  • 21

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

    она 2 как

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

    в Maven

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.0.2</version>
    </dependency>
    

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

  • 38

    Jackson 2.0 поддерживает полные циклические ссылки на объекты. Смотрит

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

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