jfinal+fastjson+getBean的问题

用fastjson发现一个很好的地方就是renderJson的时候会帮我去把getBean的方法一起帮我序列化出来,这个就很舒服了。

比如我现在有这么两个类

member成员表

class Member{
    public String name;
    public int age;
    public Depart getDepart();
}


Depart部门表

class Depart {
    public String departName;
    public List<member>getMemberList();
}


我去RenderJson(member)的时候他自动会去帮我把部门信息一起带过来这样我就免去再去用memberId换取depart信息这个步骤了,用起来很舒服,但是有个问题是

如果这个时候Depart部门表中有个查询所在此部门的所有用户的一个方法,那么就会有死循环,fastJson先去找到member中的depart然后有去找depart中的member如此一来就有问题了。

我想问的是,这种设计模式可不可取?如果可以这么做的话该怎么解决死循环的问题。

如果不可取的话,为什么这样做不好,如果我需要renderJson的时候一起把我model中的一些bean对象带出来该怎么去做比较好呢?

评论区

JFinal

2017-08-28 20:48

jfinal 的 JFinalJson 有转换深度限制,不会造成死循环,或许 fastjson 也有这个机制,去找下他的文档

如果 fastjson 没有这个配置,可以在面对这种情况时暂时用一下 jfinal:
JFinalJson.getJson().toJson(...);

要不就让 bean 里面的依赖不要形成死循环

yjjdick1990

2017-08-28 20:54

@JFinal 我记得之前问过波总sql应该写在哪里service里还是dao,波总说过是写在service中,那如果用这种getBean的方式就不能避免的有些sql要写在dao中,这样是不是也不太好?

JFinal

2017-08-28 20:56

@yjjdick1990 这个贴子我没有看出来与 getBean 有什么关系,getBean 仅仅是 Controller 中的一个从请求中解析参数,并封装成 bean 的方法

而这个贴子我一直认为是 bean 转 json 的事

大龙

2017-08-28 21:21

可以在getMemberList()前面加句@JSONField(serialize = false),就不回在序列化这个get了。

JFinal007

2017-09-02 22:40

你这个头像是UZI吗

loveyeah

2018-09-29 13:53

@JSONField(format="yyyy-MM-dd")这个无效,格式化不了,是什么原因?

yjjdick1990

2018-10-31 14:11

@loveyeah 你需要写个序列化的实现吧,这样应该不行的吧

热门反馈

扫码入社