JsonKit.toJson 解析model 会丢失一部分

因为在model 需要用到一对多的问题 我用以下方法实现(添加了属性),

public class Servers extends Model<Servers> {
    public static final Servers dao = new Servers();

    public ServicerIdc getIdc() {
        return idc;
    }

    public void setIdc(ServicerIdc idc) {
        this.idc = idc;
    }

    public List<ServicerGroup> getGroup() {

        return group;
    }

    public void setGroup(List<ServicerGroup> group) {
        this.group = group;
    }

    private  List<ServicerGroup> group;
    private  ServicerIdc idc ;

}

然后用Page方法获取主表的数据:

Page<Servers> list = Servers.dao.paginate(pageIndex, pageSize, "select * ", " from servers");


server中的一个外键 ,一个一对多 我通过以下方法去实现:

for (Servers server : list.getList()) {
    server.setGroup(ServicerGroup.dao.find("SELECT sql语句", server.get("server_id")));
    server.setIdc(ServicerIdc.dao.findById(server.get("idc_id")));

}


得到的list 是如下结构:


blob.png

在用

JsonKit.toJson(list)

的时候 ,把我自己加入的 group,idc两个节点丢失 不在包含的json里面,请教如何包含这两个节点.,能否提供一个例子实现我要的功能.谢谢了

评论区

JFinal

2016-08-30 21:55

介绍比较简单的解决方案,方案一:
1:去掉 private List group 类似的属性
2:可留下 setGroup(List group)这样的方法,在此类方法内部使用 put(k, v) 与 get(k, v) 的形式将数据存放在 model 的 Map attrs 属性中即可

方案二:
1:使用 jfinal 2.2 的 Generator 生成 baseModel,为 model 添加上了 getter、setter
2:在最终的 Model 例如上例中的 Servers 类中添加你所需要的额外属性与 getter、setter
3:通过 me.setJsonFactory(new FastjsonJsonFactory()) 将 json 实现切换到 fastjson,这样在转换 json 时会根据 setter 与 getter 来转换,就会照顾到你额外添加的 getter 方法

JFinal

2016-08-30 21:56

jfinal 的默认 json 实现在转换json string 时,只对 model 中的 Map attrs 进行转换,不会理会 getter 方法,所以切换到 fastjson 或者 jackson 实现就可以,前提是先用 jfinal 2.2 的生成器生成 base model,因为这样 model 才拥有 getter、setter 供其使用

tuxming

2018-07-27 14:52

如果我想两则都包括,怎么办。

热门反馈

扫码入社