51

我有两个实体:

Parent {
   Child[] children;
}

and 

Child {
   Parent parent;
}

我知道@JsonBackReference@JsonManagedReference。它们很好,如果我要序列化Parent​​.

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

换句话说:

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

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

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

4

2 回答 2

46

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

基本上,您需要将 new@JsonIdentityInfo用于需要 id/idref 样式处理的类型。在您的情况下,这将是ParentChild类型(如果一个扩展另一个,只需将其添加到超类型就可以了)。

于 2012-04-09T17:21:24.123 回答
30

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 提供了一个很好的链接开始

于 2015-03-07T01:21:02.427 回答