<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ply

    吞噬黑暗
    posts - 1, comments - 11, trackbacks - 0, articles - 13
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
    jQuery調(diào)用JSON時(shí),net.sf.json.JSONException: There is a cycle in the hierarchy!

    遇到了一些問(wèn)題,如hibernate延遲加載錯(cuò)誤,這都是老掉牙的問(wèn)題了,一看就知道加個(gè)lazy=flase就OK了。想不到快要完成了又遇到了新的問(wèn)題,JSON死循環(huán),實(shí)在讓人郁悶。異常如下:


    net.sf.json.JSONException: There is a cycle in the hierarchy!
            at net.sf.json.util.CycleDetectionStrategy$StrictCycleDetectionStrategy.
    handleRepeatedReferenceAsObject(CycleDetectionStrategy.java:97)
            at net.sf.json.JSONObject._fromBean(JSONObject.java:674)
            at net.sf.json.JSONObject.fromObject(JSONObject.java:181)
            at net.sf.json.JSONArray._processValue(JSONArray.java:2381)
            at net.sf.json.JSONArray.processValue(JSONArray.java:2412)
            Truncated. see log file for complete stacktrace
    >


    仔細(xì)查了一下發(fā)現(xiàn)是hibernate主外鍵關(guān)聯(lián)的錯(cuò),后來(lái)就想下json源代碼下來(lái)看,發(fā)現(xiàn)大費(fèi)周章都沒(méi)搞到j(luò)son源碼,還是老辦法反編譯瞅瞅,發(fā)現(xiàn)JSONArray根據(jù)判斷取得的不同類型調(diào)用相應(yīng)的方法,

    if (object instanceof Collection)
        return _fromCollection((Collection)object, jsonConfig);

    而我從hibernate那得到的是list,所以去調(diào)用了_fromCollection方法,而里面的方法發(fā)現(xiàn)一個(gè)問(wèn)題:該方法會(huì)不斷的拆開(kāi)實(shí)體屬性,直到?jīng)]有為止,而我的ContactGroup里有兩個(gè)屬性用于自身關(guān)聯(lián)

    private Set contactGroups = new HashSet(0);
    private Set contactGroupPersons = new HashSet(0);


    也就是說(shuō)主外鍵自身關(guān)聯(lián)的是個(gè)死循環(huán),那怎么才能不讓他出現(xiàn)這種情況呢,應(yīng)該有個(gè)配置的參數(shù)后者終止循環(huán)的地方吧,查看發(fā)
    現(xiàn),jsonConfig,呵呵,config應(yīng)該是配置參數(shù)吧,參看JsonConfig看見(jiàn)巨多的屬性,有點(diǎn)暈PropertyFilter
    ,不提了,看了老半天,發(fā)現(xiàn)了一個(gè)屬性PropertyFilter,PropertyFilter 是一個(gè)interface,代碼如下:


    public interface PropertyFilter
    {


    public abstract boolean apply(Object obj, String s, Object obj1);
    }


    也就是說(shuō)我可以通過(guò)這個(gè)方法過(guò)濾掉List里的相應(yīng)屬性,只要讓它返回true就可過(guò)濾掉,……,有點(diǎn)懸……我們重寫(xiě)一下這個(gè)方法:


    JsonConfig cfg = new JsonConfig();
        cfg.setJsonPropertyFilter(new PropertyFilter()
        {
             public boolean apply(Object source, String name, Object value) {
               if(name.equals("contactGroups")||name.equals("contactGroupPersons")) {
                 return true;
               } else {
                 return false;
              }
            }
           });

    將hibernate產(chǎn)生的實(shí)體bean中的contactGroups和contactGroupPersons過(guò)濾掉就OK了!

    然后調(diào)用JSONArray.fromObject(mychildren,cfg); mychildren是hibernate返回的list。

     

     1List<ShoppingCart> listCarts = sCartServiceImpl
     2                        .ShoppingCartTable(shoppingCart);
     3                // 先過(guò)濾對(duì)set集合的拆解
     4                JsonConfig config = new JsonConfig();
     5                config.setJsonPropertyFilter(new PropertyFilter() {
     6                    @Override
     7                    public boolean apply(Object arg0, String arg1, Object arg2) {
     8                        if (arg1.equals("shoppingCarts")) {
     9                            return true;
    10                        }
     else {
    11                            return false;
    12                        }

    13                    }

    14                }
    );
    15                // 將數(shù)據(jù)轉(zhuǎn)換成Json數(shù)據(jù)
    16                JSONArray jsonObject = JSONArray.fromObject(listCarts, config);
    17                System.out.println(jsonObject.toString());
    18

    搞了一下午,參考網(wǎng)絡(luò)的資料!解決問(wèn)題了!


    評(píng)論

    # re: jQuery調(diào)用JSON時(shí),net.sf.json.JSONException: There is a cycle in the hierarchy   回復(fù)  更多評(píng)論   

    2012-06-26 15:22 by cfm
    請(qǐng)問(wèn)這個(gè)PropertyFilter接口怎么調(diào)用啊 我在類上實(shí)現(xiàn)這個(gè)接口編譯不通過(guò)

    # re: jQuery調(diào)用JSON時(shí),net.sf.json.JSONException: There is a cycle in the hierarchy   回復(fù)  更多評(píng)論   

    2012-12-07 13:49 by upup
    @cfm
    你只要把這個(gè)接口當(dāng)成一個(gè)參數(shù)放到fromObject里面就行了。
    JSONArray jsonObject = JSONArray.fromObject(listCarts, config);

    # re: jQuery調(diào)用JSON時(shí),net.sf.json.JSONException: There is a cycle in the hierarchy [未登錄](méi)  回復(fù)  更多評(píng)論   

    2012-12-11 16:30 by Rose
    太感謝了,我正好碰到這個(gè)問(wèn)題了。

    # re: jQuery調(diào)用JSON時(shí),net.sf.json.JSONException: There is a cycle in the hierarchy   回復(fù)  更多評(píng)論   

    2013-09-16 09:25 by taojie
    請(qǐng)問(wèn)要在哪里重寫(xiě)呢?為什么這里老是報(bào)這個(gè)異常

    # re: jQuery調(diào)用JSON時(shí),net.sf.json.JSONException: There is a cycle in the hierarchy   回復(fù)  更多評(píng)論   

    2013-09-16 09:41 by taojie
    shoppingCarts指的是哪里的屬性還是?

    # re: jQuery調(diào)用JSON時(shí),net.sf.json.JSONException: There is a cycle in the hierarchy   回復(fù)  更多評(píng)論   

    2013-10-25 11:51 by er
    根本就行不通

    # re: jQuery調(diào)用JSON時(shí),net.sf.json.JSONException: There is a cycle in the hierarchy   回復(fù)  更多評(píng)論   

    2013-11-26 14:31 by vf
    vddv

    # re: jQuery調(diào)用JSON時(shí),net.sf.json.JSONException: There is a cycle in the hierarchy   回復(fù)  更多評(píng)論   

    2014-04-17 15:57 by hong0220
    已經(jīng)解決了,好用啊

    # re: jQuery調(diào)用JSON時(shí),net.sf.json.JSONException: There is a cycle in the hierarchy   回復(fù)  更多評(píng)論   

    2014-05-02 11:01 by @jack
    不錯(cuò)是那個(gè)問(wèn)題,出現(xiàn)了死循環(huán),只要把實(shí)體中相應(yīng)的屬性過(guò)濾掉就OK,頂

    # re: jQuery調(diào)用JSON時(shí),net.sf.json.JSONException: There is a cycle in the hierarchy [未登錄](méi)  回復(fù)  更多評(píng)論   

    2016-03-01 17:13 by monkey
    樓主太給力了,謝謝你的分享,好人一生平安!!!

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 你是我的城池营垒免费看| 久久国产免费观看精品3| 国产亚洲精品免费视频播放| 久久这里只精品热免费99| 亚洲国产韩国一区二区| 国产成人亚洲综合网站不卡| 日韩精品视频免费网址| 一级成人毛片免费观看| 四虎影视精品永久免费| 国产啪精品视频网站免费尤物| 亚洲日本视频在线观看| 亚洲成av人片天堂网老年人 | a级日本高清免费看| 亚洲欧洲日韩综合| 免费在线视频一区| 日韩少妇内射免费播放| 亚洲精品美女在线观看| 亚洲精品视频免费| 一出一进一爽一粗一大视频免费的| 亚洲美女视频免费| 亚洲免费无码在线| 99在线视频免费观看视频 | 一个人看的www视频免费在线观看 一个人看的免费观看日本视频www | 亚洲国产精品成人网址天堂| 亚洲一级毛片免费看| 亚洲国产品综合人成综合网站| 免费国产人做人视频在线观看| 91福利免费视频| 好吊色永久免费视频大全 | 一级特黄aaa大片免费看| 2020年亚洲天天爽天天噜| 国产精品亚洲片在线| 日本特黄特色免费大片| 96免费精品视频在线观看| 美女被免费网站91色| 亚洲AV无码一区二区乱子仑| 亚洲三级在线播放| 91情国产l精品国产亚洲区| 亚洲另类激情综合偷自拍图| 亚洲国产成人久久综合野外| 午夜免费福利影院|