- 杰克逊与birectional关系实体的序列化(避免循环)- 杰克逊与birectional关系

2019-05-13 10:53发布

我有两个实体:

Parent {
   Child[] children;
}

and 

Child {
   Parent parent;
}

我知道关于@JsonBackReference@JsonManagedReference 。 他们是很好的,如果我序列化的情况下, Parent

但我也需要转移的情况下, Child ,我想有parent填充字段。

换一种说法:

  1. 在系列化Parent就应该有children ,但他们的父母字段可能是空的(可以通过使用JSON参考注解来解决)。
  2. 在系列化Child它应该有parent与他们的children (但children没有了parent居住。

有没有使用标准杰克逊的能力来解决它的方法吗?

即跳过这已经连载,而不是资格或不符合序列标记域实体系列化。

Answer 1:

杰克逊2.0不支持完整的循环对象的引用。 请参阅“ 杰克逊发行2.0 ”(节“处理任何对象图,甚至是环状的!”)的一个例子。

基本上,你将需要使用新的@JsonIdentityInfo用于需要ID / IDREF风格处理的类型。 在你的情况,这将是双方ParentChild类型(如果一个扩展等,只需将其添加到父类型,这就是罚款)。



Answer 2:

非常方便的接口实现在杰克逊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提供了一个很好的链接,从开始



文章来源: Jackson - serialization of entities with birectional relationships (avoiding cycles)