先寫一下原因吧!我是寫的SSH項目,在項目中我遇到的問題是把分頁對象(也就是pageBean對象)轉化為json數據,下面為代碼:
public class PageBean <T>{
//當前頁
private int pageNum;
//頁面顯示數量
private int pageSize;
//查詢總數(查詢數據庫所得)
private int totalRecord;
//當前頁開始索引
private int startIndex;
//總頁面數
private int totalPage;
//數據
private List<T> data;
由於我寫的是組與成員之間的組那塊,組與成員
在hibernate關系是多對多關系,當你想把組成員對象集合轉化為jsong格式,那麼你應該發現在成員對象中是包含組對象集合的,而組對象是包含成員對象的集合。這就是問題所在,也是異常
freemarker.template.TemplateModelException: Method public java.lang.String org.apache.commons.lang.exception.NestableRuntimeException.getMessage(int) threw an exception when invoked on net.sf.json.JSONException: There is a cycle in the hierarchy!
at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:130)
因為你想把組對象轉為為json對象,那麼在轉化時必然會去把成員對象轉化為json,所以導致死循環。
你要做的事破除該死循環,附上所有代碼
PageBean<User> resultUser = userService.findUserByUse(evenFind);//查找所有用戶組對象數據並封裝到分頁對象中
JSONArray jsonArray = new JSONArray();
JSONObject jsonObject = new JSONObject();
if(resultUser != null){
//循環把每個對象取出,生成json對象,不能直接生成json數組對象,否則會報原來的錯誤,
if(resultUser.getData().size()>0){
for(int i= 0 ;i<resultUser.getData().size();i++){
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setIgnoreDefaultExcludes(true);
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
//防止自包含
String [] strArry= {"userGounp"};
//需要去除轉化為json對象的屬性名稱
jsonConfig .setExcludes(strArry);
JSONObject json = JSONObject.fromObject(resultUser.getData().get(i),jsonConfig);
//添加到json對象數組中
jsonArray.add(json);
}
}
jsonObject.put("data",jsonArray);
jsonObject.put("pageSize",resultUser.getPageSize());
jsonObject.put("pageNum", resultUser.getPageNum());
}
第一次寫,寫的不好還請諒解。全為自己手寫,和思路。