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);