杰克逊 - 具有双向关系的实体的序列化(避免周期)

Eug*_*sky 43 java json cycle jackson bidirectional-relation

我有两个实体:

Parent {
   Child[] children;
}

and 

Child {
   Parent parent;
}
Run Code Online (Sandbox Code Playgroud)

我知道@JsonBackReference@JsonManagedReference.如果我正在序列化实例,那么它们很好Parent.

但我还需要传输实例,Child并希望parent填充该字段.

换一种说法:

  1. Parent它的序列化应该有,children但他们的父字段可能是空的(可以通过使用json引用注释来解决).
  2. Child它的序列化应该parent与他们children(但children不必parent填充.

有没有办法使用标准的Jackson功能来解决它​​?

即跳过已经序列化的实体的序列化,而不是标记符合条件或不符合序列化条件的字段.

Sta*_*Man 41

Jackson 2.0确实支持完整的循环对象引用.有关示例,请参阅" Jackson 2.0发布 "("处理任何对象图形,甚至是循环图形!"部分).

基本上,您需要对@JsonIdentityInfo需要id/idref样式处理的类型使用new .在你的情况下,这将是ParentChild两种类型(如果一个扩展另一个,只需将其添加到超类型,这很好).


Ole*_*syn 21

jackson 2库中提供了非常方便的接口实现

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

@Entity
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
public class Child { ....
Run Code Online (Sandbox Code Playgroud)

在maven

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.0.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

@StaxMan提供了一个很好的链接开始

  • 进一步支持阅读http://wiki.fasterxml.com/JacksonFeatureObjectIdentity (3认同)
  • 对休眠映射没有帮助 (2认同)