我有两个实体:
Parent {
Child[] children;
}
and
Child {
Parent parent;
}
我知道@JsonBackReference
和@JsonManagedReference
.如果我序列化Parent
实例,它们很好.
但我还需要传输Child
的实例,并且我希望填充parent
字段。
换句话说:
- 在序列化
Parent
时,它应该有children
,但它们的父字段可能为空(可以使用 json 引用注释来解决)。 - 在
Child
的序列化中,它应该parent
其children
(但children
不必填充parent
。
有没有办法使用标准的杰克逊功能来解决它?
即跳过已序列化的实体的序列化,而不是标记符合或不符合序列化条件的字段。
Jackson 2.0 确实支持完整的循环对象引用。有关示例,请参阅"Jackson 2.0 发布"("处理任何对象图,甚至是循环图!"一节)。
基本上,您需要对需要 id/idref 样式处理的类型使用新@JsonIdentityInfo
。在您的情况下,这将是Parent
和Child
类型(如果一个扩展另一个,只需将其添加到超类型即可)。
Jackson 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提供了一个很好的链接,可以从