SpringBoot之解決一對一、多對一、多對多等關聯實體在JSON序列化/輸出時產生的無限遞歸死循環問題(infinite recursion)


前言

這問題着實讓人苦不堪言,有必要把它記下了。

@JsonBackReference [親測有效]

1.使用注解@JsonBackReference標記在有關聯關系的實體屬性上
2.僅導入此注解類有效:com.fasterxml.jackson.annotation.JsonBackReference;

注:測試過程中,自身項目中分別存在@JsonBackReference、@JsonIgnore 兩類注解類,均是導入 com.fasterxml.jackson.annotation包才生效,反之導入org. codehaus. jackson. annotate 包時未能生效,繼續出現死循環JSON字符串輸出。

@Entity
@Table(name = "tb_article")
public class Article {
    /**
     * 文章所在URL
     */
    @ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH},optional=false,fetch=FetchType.LAZY)
    @JoinColumn(name = "fk_url_id", referencedColumnName = "pk_url_id", nullable = false)
    @JsonBackReference
    private Url url;

    @ManyToMany
    @JoinTable(name = "r_article_keyword",joinColumns = @JoinColumn(name = "fk_article_id"),
            inverseJoinColumns = @JoinColumn(name = "fk_word_id"))
    @JsonBackReference
    private List<Word> keywords;

    ...
}

擴展

三大注解

  • @JsonBackReference
  • @JsonManagedReference
  • @JsonIgnore

參考文獻


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM