天天看點

如何應用JsonConfig解決There is a cycle in the hierarchy!

Web項目中資料庫表很多時,往往會出現表Set集合與表Set集合的互相嵌套,在将這些資料進行JSON轉換時很可能會報一個錯誤“There is a cycle in the hierarchy!”。今天就遇到了一個棘手的問題,通過過濾條件過濾時,我發現“曾孫層”與“爺爺”層重名,我隻想過濾曾孫層時,進行單純的過濾發現把“爺爺”層也給過濾掉了,去掉過濾字元,卻提示我有“There is a cycle in the hierarchy!”。對于這種問題,幸運的是json包裡還是為我們提供了一把利劍“setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);  ”可以自動排除Circle。

    綜上所述,最終的代碼隻需要:

 PrisonUtil jsonUtil = new PrisonUtil();

 JsonConfig jsonConfig = new JsonConfig();

 ArrayList<String> lstName = new ArrayList<String>();

 lstName.add("tabDevAccesscontrols");

 lstName.add("tabApprovalInfos");//過濾掉不需要的

 //lstName.add("tabUserCardinfo");//過濾掉不需要的

 jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);  //自動為我排除circle。

 jsonUtil.ConfigFilter(lstName, jsonConfig);  

 jsonConfig.registerJsonValueProcessor(java.util.Date.class,new DateJsonValueProcessor("yyyy-MM-dd HH:mm:ss"));

 JSONArray fromObjectResult = JSONArray.fromObject(findAcLogInfo,jsonConfig);