SpringMVC、Hibernate系列之级联对象的json序列化
来源:互联网 发布:怎么申请成为淘宝达人 编辑:程序博客网 时间:2024/06/08 03:06
最近为了加深学习Spring和Hibernate,就利用Spring4、Hibernate5搭建了SpringMVC与Hibernate整合的平台框架。搭建过程曾遇到了一系列的棘手问题,在这里将相应的解决方案给予记录和分享。
问题描述
利用Jackson序列化Hibernate一对多关联对象时,出现死循环。花费了1天半时间,必须记录下来。
问题分析
很显然是由于Jackson序列化的深度序列化引起的。Hibernate的级联对象难免会存在各式各样的循环嵌套,更甚至自关联的情况。解决的思路有两种:第一种,生成对象识别码,避免对象被重复序列;第二种,避免深度序列化
问题解答
第一种.生成对象识别码,避免对象被重复序列
这里可以使用Jackson 2.0+版本新注解——@JsonIdentityInfo,作用于类或属性上,被用来在序列化/反序列化时为该对象或字段添加一个对象识别码,通常是用来解决循环嵌套的问题。弊端——对延迟加载的对象不起作用。使用示例如下:
@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "jsonID")public class Organization extends IdEntity {
第二种.避免深度序列化
注意这里特指“深度”俩字,利用@JsonIgnore注解显然是不能满足的。通过翻阅Jackson 2.0+ API文档,发现了@JsonIgnoreProperties注解现在能用在属性上了,效果就是子对象中不再包含过滤掉的的属性,而对象本身则依然包含。经测试,延迟加载也不成问题,推荐使用。使用示例如下:
@JsonIgnoreProperties(value = { "childOrgList", "userList", "parentOrg" })private List<Organization> childOrgList;// 下级部门
最终效果
{ "code": 0, "message": "", "result": { "id": 2, "name": "媒资事业部", "fullPath": "/****/媒资事业部", "parentOrg": { "id": 1, "name": "****", "fullPath": "/****" }, "childOrgList": [ { "id": 4, "name": "网络研发中心", "fullPath": "/****/媒资事业部/网络研发中心" }, { "id": 9, "name": "网络研发测试部", "fullPath": "/****/媒资事业部/网络研发测试部" } ], "userList": [] }}
Best Wishes For You!
1 0
- SpringMVC、Hibernate系列之级联对象的json序列化
- json序列化hibernate级联映射POJO
- Hibernate持久化对象的级联操作
- jackson json数据过滤,用于hibernate的懒加载对象级联关系的json解析
- Hibernate级联操作学习之持久化临时对象
- hibernate对象懒加载,json序列化失败
- hibernate 十, 持久化对象间的级联操作
- Spring MVC返回hibernate对象序列化json报懒加载出错的问题
- hibernate中json序列化对象时lazy已关闭异常的处理
- json解决hibernate中级联对象延迟加载有关问题
- Gson转换hibernate级联对象的处理
- django对象的序列化,转换json
- json解决hibernate中级联对象延迟加载问题net.sf.json.JSONException: org.hibernate.LazyInit
- hibernate+spring mvc,解决hibernate对象懒加载,json序列化失败
- hibernate+spring mvc,解决hibernate对象懒加载,json序列化失败
- hibernate + spring mvc,解决Hibernate对象懒加载,json序列化失败
- json解决hibernate中级联对象延迟加载问题net.sf.json.JSONException: org....
- json解决hibernate中级联对象延迟加载问题net.sf.json.JSONException: org....
- springboot 开发入门,及问题汇总
- 黑马程序员_String类型以及StringBuilder
- 006最小身高差
- Hibernate映射关系配置
- smarty用法汇总
- SpringMVC、Hibernate系列之级联对象的json序列化
- 事业是“横”的,挣钱是“竖”的
- iOS经典网络开源库(整理)
- HDOJ Robberies(好题背包)
- MSHFlexgrid和MSflexgrid控件异同
- Codeforces 570A__Elections
- 用递归算法求n阶勒让得多项式的值
- UIAlertView的基本用法
- 数学D - Box of Bricks