There is a cycle in the hierarchy
出现原因:三表之间存在映射关系,若不限制循环,其中会由于表的外键问题而出现错误
表:Permission 、Role 、PermissionRole
解决方法:
一、
Servlet:
List<PermissionRole> perRole = daoP.getPermissionByRoleId( long id );
List<Permission> list = new ArrayList<Permission>();
Permission p = null;
for(PermissionRole pr : perRole){
p = new Permission(pr.getPermission().getId(), pr.getPermission().getPermission(), pr.getPermission().getUrl(), pr.getPermission().getDescs()); //构造函数
list.add(p);
}
JSONArray json = JSONArray.fromObject(list);
Bean:
新增构造函数:
public Permission(String permission, String url, String descs) { //去除导致死循环的Set<PermissionRole> permissionRoles
this.permission = permission;
this.url = url;
this.descs = descs;
this.permissionRoles = permissionRoles;
}
二、
基于jar包:fastjson-1.2.3.jar
map 自定义。
SimplePropertyPreFilter filter = new SimplePropertyPreFilter( Permission.class,"id","所需列","所序列");
String josn=JSONArray.toJSONString(map,filter);
//把所需列提取出来,无需去除循环。
三:
忽略死循环问题。
JsonConfig jsonConfig = new JsonConfig(); //建立配置文件
jsonConfig.setIgnoreDefaultExcludes(false); //设置默认忽略
jsonConfig.setExcludes(new String[]{
//这里书写需要过滤的东西,比如导致死循环的外键。
});