使用hibernate容易出现该问题,主要是由于pojo类属性存在级联关系。比如说员工和部门,在员工表里面有部门属性,而在部门表里面有个员工集合,这样就存在了嵌套引用的问题了,就会抛出这个异常。在使用Gson解决该问题时,比较困难的,而且报错是:
java.lang.StackOverflowError
at java.lang.Integer.toString(Integer.java:
305
)
at java.lang.Integer.toString(Integer.java:
118
)
最容易解决的方法是用json去除相互嵌套的属性,解决如下图:
/得到所有部门 2 //返回json对象字符串 3 public String getAllDep(){ 4 List list = deptDAO.findAll(); 5 JsonConfig config = new JsonConfig(); 6 config.setExcludes(new String[]{"emps"});//除去emps属性 7 String json = JSONArray.fromObject(list, config).toString(); 8 return json; 9 } 10 11 //得到所有员工 12 public String getAllEmp(int id){ 13 List list = empDAO.findByProperty("dept.deptId", id); 14 JsonConfig config = new JsonConfig(); 15 config.setExcludes(new String[]{"dept"});//除去dept属性 16 String json = JSONArray.fromObject(list, config).toString(); 17 return json; 18 }