问题的出现
如果需要解析的数据间存在级联关系,而互相嵌套引用,在hibernate中极容易嵌套而抛出net.sf.json.JSONException: There is a cycle in the hierarchy异常。
解决办法
1.设置JSON-LIB让其过滤掉引起循环的字段。 |
- JsonConfig config = new JsonConfig();
- config.setIgnoreDefaultExcludes(false);
- config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
- config.registerJsonValueProcessor(Date.class,new DateJsonValueProcessor("yyyy-MM-dd")); //date processor register
- config.setExcludes(new String[]{//只要设置这个数组,指定过滤哪些字段。
- "consignee",
- "contract",
- "coalInfo",
- "coalType",
- "startStation",
- "balanceMan",
- "endStation"
- });
- String tempStr = "{\"TotalRecords\":"+ total.toString() +",\"Datas\":"+JSONSerializer.toJSON(list,config).toString()+"}";
- out.print(tempStr);
JsonConfig config = new JsonConfig(); config.setIgnoreDefaultExcludes(false); config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); config.registerJsonValueProcessor(Date.class,new DateJsonValueProcessor("yyyy-MM-dd")); //date processor register config.setExcludes(new String[]{//只要设置这个数组,指定过滤哪些字段。 "consignee", "contract", "coalInfo", "coalType", "startStation", "balanceMan", "endStation" }); String tempStr = "{\"TotalRecords\":"+ total.toString() +",\"Datas\":"+JSONSerializer.toJSON(list,config).toString()+"}"; out.print(tempStr);
2.设置JSON-LIB的setCycleDetectionStrategy属性让其自己处理循环,省事但是数据过于复杂的话会引起数据溢出或者效率低下。
- JsonConfig config = new JsonConfig();
- config.setIgnoreDefaultExcludes(false);
- config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
- config.registerJsonValueProcessor(Date.class,new DateJsonValueProcessor("yyyy-MM-dd")); //date processor register
- String tempStr = "{\"TotalRecords\":"+ total.toString() +",\"Datas\":"+JSONSerializer.toJSON(list,config).toString()+"}";
- out.print(tempStr);