教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

FastJson中“$ref 循環(huán)引用”的問(wèn)題

更新時(shí)間:2018年11月27日14時(shí)40分 來(lái)源:傳智播客 瀏覽次數(shù):

  在前幾天的時(shí)候,我使用fastjson的時(shí)候,發(fā)現(xiàn)一個(gè)問(wèn)題,就是如果一個(gè)集合里面添加相同的一個(gè)對(duì)象,然后將集合轉(zhuǎn)化為對(duì)應(yīng)的json字符串,發(fā)送到頁(yè)面去解析的時(shí)候,發(fā)現(xiàn)只能夠讀出第一個(gè)對(duì)象,后面的對(duì)象就讀不出來(lái),頁(yè)面上顯示的代碼:

  從頁(yè)面圖片我們可以看到,添加了重復(fù)的seller之后,只有第一個(gè)可以正常顯示,后面的都是顯示為$ref:"$.rows[0].seller",出現(xiàn)這種現(xiàn)象的原因是fastjson開(kāi)啟了fastjson的“循環(huán)引用檢測(cè)”機(jī)制,這種機(jī)制會(huì)讓fastjson在對(duì)于將Java對(duì)象轉(zhuǎn)化為對(duì)應(yīng)的json對(duì)象的時(shí)候,同一個(gè)對(duì)象的使用,下面的對(duì)象都改為了對(duì)前面對(duì)象的應(yīng)用,所以,這就是我們?yōu)槭裁纯吹?quot;$.rows[0].seller"這個(gè)東西的原因,那么,我們只要講這種“循環(huán)引用檢測(cè)”機(jī)制關(guān)掉即可

  如果是直接使用fastjson的話,可以這樣關(guān)掉:

  在將對(duì)象轉(zhuǎn)化為json的時(shí)候,添加這個(gè):SerializerFeature.DisableCircularReferenceDetect

  SerializerFeature.DisableCircularReferenceDetect:關(guān)閉fastjson的循環(huán)引用檢測(cè),例如:

  

  如果是是使用了spring+springmvc的方式的話,可以添加

  



作者:傳智播客JavaEE培訓(xùn)學(xué)院

首發(fā):http://java.itcast.cn

0 分享到:
和我們?cè)诰€交談!