jackson – 具有双向关系的实体序列化(避免循环)
我有两个实体:
Parent { Child[] children; } and Child { Parent parent; }
我知道@JsonBackReference
和@JsonManagedReference
。 它们是好的,如果我正在序列化Parent
实例。
但是我也需要传输Child
实例,我希望填充parent
字段。
换一种说法:
- 在
Parent
序列化中,它应该有children
但是他们的父领域可能是空的(可以通过使用json引用注释来解决)。 - 在
Child
序列化中,parent
应该有children
(但是children
不必有parent
。
有没有办法使用标准的jacksonfunction解决它?
即跳过已序列化的实体的序列化,而不是标记符合或不符合序列化条件的字段。
Jackson 2.0确实支持完整的循环对象引用。 有关示例,请参阅“ Jackson 2.0发布 ”(“处理任何对象图,甚至是循环的!”一节)。
基本上,你需要使用新的@JsonIdentityInfo
来处理需要id / idref风格的types。 在你的情况下,这将是Parent
和Child
types(如果一个扩展其他,只需将其添加到超级types,这很好)。
在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提供了一个很好的链接,从开始