有一个A表,和B表,是one to many的关系。当我将B表从数据库中查出后.
通过:
- JSONArray responseJsonMsgs=JSONArray.fromObject(list);
转成Json对象时报错: There is a cycle in the hierarchy!
稍微想想就能明白,这里产生了死循环查询(跟hibernate的配置文件有关)。
解决方案,在转成Json对象的时候过滤掉bean中引起死循环查询的属性(一般为设置的外键)。
我这里写了一个通用的过滤器对象,大家可以借鉴下
- package com.cfc.web.msgcenter;
- import net.sf.json.JsonConfig;
- import net.sf.json.util.PropertyFilter;
- public class JsonFilter {
- public static JsonConfig getFilter(final String[] s){
- JsonConfig config = new JsonConfig();
- config.setJsonPropertyFilter(new PropertyFilter(){
- public boolean apply(Object source, String name, Object value) {
- if(juge(s,name)) {
- return true;
- } else {
- return false;
- }
- }
- public boolean juge(String[] s,String s2){
- boolean b = false;
- for(String sl : s){
- if(s2.equals(sl)){
- b=true;
- }
- }
- return b;
- }
- });
- return config;
- }
- }
转换的时候调用过滤器
- JsonConfig config = JsonFilter.getFilter(new String[]{"gameclass"});//String数组中存储的是要过滤的属性
- JSONArray responseJsonMsgs=JSONArray.fromObject(list,config);
问题解决!