在使用递归的时候发现递归到一定深度,往下去的对象属性都是null

我也不知道这是不是Jfinal框架的原因~

目前在做一个tree结构,使用了递归,代码如下

// 请求接口
public Ret questionnaires() {
   OtQOption root=OtQOption.dao.findRoot();
   if (root!=null){
      findChildren(root);
   }
   return Ret.ok("root",root);
}
// 递归方法
public void findChildren(OtQOption option){
   List<OtQOption> children=OtQOption.dao.findChildren(option.getId());
   if (children.size()>0){
      option.put("children",children);
      for (OtQOption child : children) {
         findChildren(child);
      }
   }
}

// sql查询
public List<OtQOption> findChildren(long pid){
   String sql="select * from ot_q_option where pid=?";
   return super.find(sql,pid);
}

image.png

下面是通过sql工具查询的结果,是有数据的

image.png

给指导下是哪的问题

评论区

Dull

2018-09-06 11:09

目前已通过发现问题,问题出在ret内置的json转换上

JFinal

2018-09-06 11:10

配置一下:
JFinalJson.setConvertDepth(100);

JFinal

2018-09-06 11:16

JFinalJson 为了避免在循环依赖上出现无限循环,使用了 convertDepth 来进行保护,默认转换深度为 15 层

Dull

2018-09-06 11:21

@JFinal 牛B啊,这都想到了

JFinal

2018-09-06 12:31

@Dull 用户自己的代码,如果 A 依赖 B , B 依赖 C , 如果这时 C 依赖于 A,就形成了间接循环依赖,对这类情况的 json 转换必然会造成无限循环,默认转换 30 层对于大部分情况是够用的

看来默认转换深度得再调整得大一点

热门反馈

扫码入社