springmvc 返回hibernate級聯實體json格式報錯

當不存在實體之間級聯懶加載狀況下,直接把實體放在Model裏就能夠,如圖java

可是若是存在實體建級聯的狀況呢?git

@JsonIgnoreProperties(ignoreUnknown=true)
public class Course extends IdEntity {
     
    private static final long serialVersionUID = 2118439396249691137L;
    private String name;
    private User createBy;
    private List<CourseTag> courseTags;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "course",cascade = CascadeType.ALL)
    public List<CourseTag> getCourseTags() {
        return courseTags;
    }
 
    public void setCourseTags(List<CourseTag> courseTags) {
        this.courseTags = courseTags;
    }
 
    @ManyToOne(fetch = FetchType.LAZY)
    public User getCreateBy() {
        return createBy;
    }
 
    public void setCreateBy(User createBy) {
        this.createBy = createBy;
    }
}

若是此時之間把course放在model裏就會報錯(上面提示的錯誤)github

解決這種有幾種方式:spring

1)jackson-datatype-hibernatejson

    具體教程連接:https://github.com/FasterXML/jackson-datatype-hibernatemvc

    沒有深刻研究,大概就是忽略懶加載的實體,因此返回的course實例裏面courstags爲空app

2)結婚1)和實際報錯誤的提示(to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS框架

    由於springmvc默認使用jackson,jackson又是使用默認序列化規則,根據提示修改下規則便可
fetch

這種狀況,會把全部級聯的實體都實例化this

3)換個思路,既然級聯實體實例化出問題,那就不實例化級聯實體

經過JsonIgnore忽略它,而後在controller中這樣處理

一樣也能夠達到能夠傳遞出相應信息的目的

4)不經過springmvc的Model容器返回,用Map做爲容器(據說的沒具體用過)

把course放在map裏面

Map map = new HashMap<String, Object>();
map.put("course", course);
return new ResponseEntity(map, HttpStatus.ok);

最後說明一點:轉成json格式和hibernate是否懶加載沒有關係,是和第三方框架有關

前面三個我本身都試了,可是最後我本身選的是第三種,反正看你們根據本身的須要選擇,本身尚未研究透,先這樣吧。

相關文章
相關標籤/搜索