Jackson - 具有双系关系的实体的序列化(避免循环)

我有两个实体:

Parent {
   Child[] children;
}

and 

Child {
   Parent parent;
}

我知道和.它们很好,如果我正在序列化 的实例。@JsonBackReference@JsonManagedReferenceParent

但我还需要传输 的实例,并且我希望填充该字段。Childparent

换句话说:

  1. 在序列化时,它应该具有,但它们的父字段可能是空的(可以使用json引用注释来解决)。Parentchildren
  2. 在序列化上,它应该具有他们的(但不必已填充。Childparentchildrenchildrenparent

有没有办法使用标准的杰克逊功能来解决它?

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


答案 1

Jackson 2.0 支持完整的循环对象引用。有关示例,请参阅“Jackson 2.0 发布”(“处理任何对象图,甚至是循环图!”一节)。

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


答案 2

非常方便的接口实现在 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

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

@StaxMan提供了一个很好的链接,可以从开始