有一個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);
問題解決!