我有两个实体:
Parent {
Child[] children;
}
and
Child {
Parent parent;
}
我知道@JsonBackReference
和@JsonManagedReference
。
如果我正在序列化Parent
的实例,那么它们很好。
但我还需要转移Child
的实例,并希望填充parent
字段。
换句话说:
Parent
的序列化,它应该有children
但是它们的父字段可能是空的(可以通过使用json引用注释来解决)。Child
序列化时,parent
应该children
children
,但parent
不必填充{{1}}。有没有办法使用标准的Jackson功能来解决它?
即。跳过已经序列化的实体的序列化,而不是标记符合条件或不符合序列化条件的字段。
答案 0 :(得分:38)
Jackson 2.0确实支持完整的循环对象引用。有关示例,请参阅“Jackson 2.0 released”(“处理任何对象图,甚至是循环图!”部分)。
基本上,对于需要id / idref样式处理的类型,您需要使用新的@JsonIdentityInfo
。在你的情况下,这将是Parent
和Child
类型(如果一个扩展另一个,只需将它添加到超类型,这很好)。
答案 1 :(得分: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 { ....
在maven中
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.0.2</version>
</dependency>
@StaxMan提供了一个从
开始的好链接