renderJson 渲染数据问题

今天用JFINAL中的 renderJson 有一个小问题,不知道是就这样设计?还是有小BUG,还是我用的不对,请各位前辈协助下呗!

具体代码如下:

1,我有个   public class SysModule extends Model<SysModule> 的实体类,实体类中除了数据库结构中的字段外,我自己加了个 private List<SysModule> children 子模块属性。

2,在业务使用过程的从数据库取了当前用户下所有的模块集合,并通过renderJson(list)返回前端,返回后发现只有一级的SysModule ,实体类下的children 都没有了。

业务实现方法:

blob.png

后台集合值:

blob.png

渲染后返回前端接收值:

blob.png

评论区

JFinal

2016-12-19 16:52

SysModule 类里面添加的属性,如果用的是 JFinalJson ,并不会被转换, JFinalJson 只会去转换 put 或者 set 到 Map attrs 中的数据,所以只需要这样:
sysModule.put("children", children) 即可

如果你的 SysModule 中的 children 属性配备了 getter 方法,可以用一下 fastjson 或者 jackson 来转换:
Fastjson.getJson().toJson(...)
Jackson.getJson().toJson(...)

jfinal 提供了三种 json 转换实现,前面两行代码分别是 fastjson还有 jackson,这两个是根据 getter 方法去转的。还有是一种是 JFinalJson,这样用:
JFinalJson.getJson().toJson(...)
JFinalJson 实现类是根据 model 中的 Map attrs 或者 Recod 中的 Map columns 来转换的,不会理会 getter 方法

JFinal

2016-12-19 16:53

总之:在 JFinalJson、Fastjson、Jackson 这三个类中的 toJson(...) 方法中设置一个断点进行调试,就清楚具体是怎么被转换的了,问题会立即得以解决

吉祥日

2016-12-19 16:58

明白了詹总,谢谢了。你还别说这个框架设计的还真心牛。
我也刚从开源社区 翻到答案。
https://www.oschina.net/question/866801_2173346

JFinal

2016-12-19 17:14

@吉祥日 很快就会有更牛逼的功能了,多多关注社区动态

似水流言1

2016-12-20 08:34

@JFinal 期待波总2.3的更新

xbb0220

2016-12-20 11:24

private List children有get方法吗?有get方法也许jfinal的jsonKit也能处理。

吉祥日

2016-12-22 23:51

@xbb0220 我直接采用的 实体.put("children",list);这样再render,就行了。

热门反馈

扫码入社