今天在使用json-lib.jar
包 将List<T> 转换为Json数据时出现
net.sf.json.JSONException: There is a cycle in the hierarchy!错误,通过查询资料得知这是因为实体类有含有外键,无法转换,通过jsonconfig
的setJsonPropertyFilter()
方法可以在转换json时将外键过滤掉这样就不会有这些问题了。具体做法如下
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setJsonPropertyFilter(new PropertyFilter() {
@Override
public boolean apply(Object arg0, String arg1, Object arg2) {
if("procinstance".equals(arg1)||"activity".equals(arg1)||"staff".equals(arg1)){
return true;
}else{
return false;
}
}
});
其中arg1未实体类中的外键属性名。
这次是第一次自己弄项目,一个比较小的查询,就想着用struts2和hibernate来进行实现,以前都是大神搭好的。这次只是引入了json-lib.jar包,然后一到转换时直接不报错执行finally
方法,真是一脸懵逼,这个异常```
exception`无法捕捉,这种情况下可以加入
catch(Throwable t){
System.out.println(t.getMessage());
}
这样就可以捕捉到原因了,事实证明是少引入了json-lib的那几个依赖包。
commons-beanutils-1.8.0.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
json-lib-2.1.jar
ezmorph-1.0.3.jar
这些均需要。