2012-04-08 2 views
39

У меня есть две сущности:Джексон - Сериализация объектов с birectional отношений (избегая циклов)

Parent { 
    Child[] children; 
} 

and 

Child { 
    Parent parent; 
} 

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

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

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

  1. На сериализации Parent он должен иметь children, но их родители поле может быть пустым (может быть решена с помощью эталонных JSON аннотаций).
  2. На сериализации Child он должен иметь parent с их children (но children не должна иметь parent населенные.

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

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

ответ

35

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

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

+0

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

+0

Да, это, большой апгрейд. Но сама особенность тоже велика. :-) – StaxMan

+1

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

17

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

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

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

в мавена

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

@StaxMan при условии хорошей связи, чтобы начать с

+2

далее поддерживающее чтение http: //wiki.fasterxml.com/JacksonFeatureObjectIdentity – Mab

+0

не помогает с отображением hibernate –

+0

Примечание: http://wiki.fasterxml.com/ теперь мертвая ссылка – Pleymor