如何解决JPA中双向绑定导致的嵌套 JSON问题
方案一:避免字段序列化
核心思想:让Jackson在序列化时“断开一端”,只保留需要的字段,避免死循环
解决措施:
-
使用
@JsonIgnore注解,直接忽略字段,不输出。@Entity public class MessageDO { @ManyToOne @JoinColumn(name = "conversation_id") @JsonIgnore // 避免无限嵌套 private ConversationDO conversation; } -
使用
@JsonManagedReference和@JsonBackReference注解,设置主从关系。主控方(父类)用
@JsonManagedReference子控方(子类)用
@JsonBackReferenceJackson只会序列化主控方,避免循环。
@Entity public class ConversationDO { @OneToMany(mappedBy = "conversation") @JsonManagedReference private List<MessageDO> messages; } @Entity public class MessageDO { @ManyToOne @JoinColumn(name = "conversation_id") @JsonBackReference private ConversationDO conversation; } -
使用
@JsonIdentityInfo注解,用 ID 引用替代对象嵌套。这样Jackson 在遇到重复对象时,只输出 ID,而不是再展开对象。
@JsonIdentityInfo

最低0.47元/天 解锁文章
1352

被折叠的 条评论
为什么被折叠?



