在最近项目中遇到好多问题,其中一个就是使用ajax请求时在Action中list转json报错,我们来看一下业务场景:
UserAction.java
//之前的方法
public String custAjax() throws IOException{
//获取list
List<User> list = cs.find();
//调用jar包中的方法
String json = JSONArray.fromObject(list).toString();
ServletActionContext.getResponse().setContentType("application/json;charset=utf-8");
ServletActionContext.getResponse().getWriter().write(json);
//不需要进行结果处理
return null;
}
我们知道这种方法在一般情况下没问题,但是如果user中有外键,那么这种转换就会进入死循环状态,也就是会直接报错,所以解决方法如下:
public String custAjax() throws IOException{
List<Customer> list = cs.find();
//对外键进行过滤,注意是使用String arg1这个参数
JsonConfig config = new JsonConfig();
config.setJsonPropertyFilter(new PropertyFilter() {
@Override
public boolean apply(Object arg0, String arg1, Object arg2) {
//这个cust_level 是个外键,把他过滤就行了
if( arg1.equals("cust_level")) return true;
return false;
}
});
String json = JSONArray.fromObject(list,config).toString();
ServletActionContext.getResponse().setContentType("application/json;charset=utf-8");
ServletActionContext.getResponse().getWriter().write(json);
//不需要进行结果处理
return null;
}
这样就解决了转json问题,以后还要多总结错误,希望对大家有帮助。