【SSH框架】生成JSON的两个典型问题:1.使用jsonlib工具获取关联属性失败。2.获取关联属性出现递归导致获取JSON失败。附解决方案

问题1原因:hibernate中的对象的关联属性默认都是懒加载的,而使用jsonlib这个工具类是通过反射去获取对象中的关联属性的,和我们通过后台直接获取的方式不同,通过后台直接获取管理属性会让hibernate去数据库中查找对应的值再初始化,而采用反射获取是不会进行这个操作的,导致获取的对象的关联属性要么失败要么为空。

问题1解决办法:用阿里巴巴的fastjson工具类代替jsonlib,就没有问题了,强烈推荐!当然也可以将对象的关联属性的配置文件设置为lazy="false",即关闭懒加载,不推荐这种做法!

问题2原因:问题2的现象是这样的,比如我有一个Customer对象,还有个SaleVisit对象,Customer与SaleVisit是一对多的关系,即他们自身都含有对方的关联属性,那我用JSON工具类转换Customer对象的时候,它会去找SaleVisit,而SaleVisit内部又含有Customer,所以又回去找Customer,导致递归无限循环,最终失败!

问题2解决方法:第一步,使用fastjson工具类,fastjson默认关联属性中找原对象的时候将原对象设为空,转换成[{"$ref":"$.rows[0]"}]这种格式。第二步,最好是把你不需要的属性用下面的方式去除。如果是获取Customer对象,那么就在他的关联属性的java文件中对应的自身的关联属性上添加一行注释@JSONField(serialize=false)那么就不会将关联属性转成json。图示如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值