jackson – 具有双向关系的实体序列化(避免循环)

我有两个实体:

Parent { Child[] children; } and Child { Parent parent; } 

我知道@JsonBackReference@JsonManagedReference 。 它们是好的,如果我正在序列化Parent实例。

但是我也需要传输Child实例,我希望填充parent字段。

换一种说法:

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

有没有办法使用标准的jacksonfunction解决它?

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

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

基本上,你需要使用新的@JsonIdentityInfo来处理需要id / idref风格的types。 在你的情况下,这将是ParentChildtypes(如果一个扩展其他,只需将其添加到超级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提供了一个很好的链接,从开始

Interesting Posts