此代码是对hibernate查询后的数据进行过滤,避免循环引用的产生,造成页面数据回显失败.
(fastjson过滤属性,重点在于PropertyFilter 这个东西(应用场景,hibernate懒加载过滤不要的属性))
//对json数据进行过滤,并且取消循环引用
//第一种使用方法
PropertyFilter filter = new PropertyFilter() {
@Override
public boolean apply(Object arg0, String FiledName, Object arg2) {
if ("cusPhone".equalsIgnoreCase(FiledName)) {
return false;
}
if ("id".equalsIgnoreCase(FiledName)) {
return false;
}
if ("orders".equalsIgnoreCase(FiledName)) {
return false;
}
if ("orders".equalsIgnoreCase(FiledName)) {
return false;
}
if ("cusImgsrc".equalsIgnoreCase(FiledName)) {
return false;
}
return true;
}
};
String json = JSONArray.toJSONString(list,filter,SerializerFeature.DisableCircularReferenceDetect);
//第二种使用方法
public class ComplexPropertyPreFilter implements PropertyFilter {
private Map<Class<?>, Set<String>> includeMap = new HashMap<Class<?>, Set<String>>();
//@Override
public boolean apply(Object source, String name, Object value) {
for(Entry<Class<?>, Set<String>> entry : includeMap.entrySet()) {**
Class<?> class1 = entry.getKey();
if(source.getClass() == class1){
Set<String> fields = entry.getValue();
for(String field : fields) {
if(field.equals(name)){
return false;
}
}
}
}
return true;
}
public ComplexPropertyPreFilter(Map<Class<?>, Set<String>> includeMap){
this.includeMap = includeMap;
}
}