JsonManagedReference与JsonBackReference

我想知道jackson的@JsonManagedReference@JsonBackReference之间的区别?

@JsonManagedReference是引用的前向部分 – 正常序列化的部分。 @JsonBackReference是引用的后半部分 – 它将从序列化中省略。

所以他们真的依赖于你们关系的方向

 public class User { public int id; public String name; @JsonBackReference public List userItems; } public class Item { public int id; public String itemName; @JsonManagedReference public User owner; } 

@JsonManagedReference@JsonBackReference旨在处理字段之间的这种双向链接,一个用于父角色,另一个用于子角色。

为了避免这个问题,处理链接使得使用@JsonManagedReference注释注释的属性得到正常处理(正常序列化,没有特殊的反序列化处理),并且使用@JsonBackReference注释注释的属性不是序列化的; 在反序列化期间,其值设置为具有“托管”(转发)链接的实例。

我更喜欢
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id", scope = Long.class)
其中property是主键字段的名称,scope是Type的类型

  • @JsonManagedReference – >管理引用的前向部分,此注释标记的字段是获取序列化的字段
  • @JsonBackReference – >管理引用的反向部分,并且未标记使用此批注标记的字段/集合。

使用案例:您的实体/表中有一个或多个关系,如果不使用上述内容,则会导致错误

 Infinite Recursion and hence stackoverflow - > Could not write content: Infinite recursion (StackOverflowError) 

出现上述错误是因为Jackson(或其他类似的人)试图序列化关系的两端并最终进行递归。

@JsonIgnore执行类似的function,但上面提到的注释更可取。