atitit.解决net.sf.json.JSONException There is a cycle in the hierarchy

1. 环境:使用hibernate4跟个,,要不个哪的对象系列化成个json的时候儿有这个问题了...
1

2. 原因::hb默认的lazy 方式造成的当有关联对象的时候儿...
1

3. #---解决::lazy =false  (推荐).. 1

4. 别的有以下的四个方法可以解决hibernate的序列化问题 2

5. BeanUtils.copyProperties  可以解决... 2

6. 属性过滤器PropertyFilter 2

7. 简单属性过滤器setExclusions法 3

8. JsonBeanProcessor法 4

9. 设置JSON-LIB的setCycleDetectionStrategy属性让其自己处理循环(ati测试不生效O81)..
4

10. 参考 5

1. 环境:使用hibernate4跟个,,要不个哪的对象系列化成个json的时候儿有这个问题了...

2. 原因::hb默认的lazy 方式造成的当有关联对象的时候儿...

3. #---解决::lazy =false  (推荐)..

<!-- o7o ati -->

<!-- many开头的是代表该表持有外键 -->

<!-- class可以不写,因为根据name的值computer(属性),会通过反射自动找到属于哪个类的 -->

<many-to-one name="prgrm"  insert="false" update="false"  lazy="false">

<column name="progarmme_id" />

</many-to-one>

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

4. 别的有以下的四个方法可以解决hibernate的序列化问题

1 domain类实现JSONString接口

2 建立JsonConfig实例,并配置属性排除列表

3 用属性过滤器

4 写一个自定义的JsonBeanProcessor

5. BeanUtils.copyProperties  可以解决...

GvProgramme stp=(GvProgramme) arg1;

GvProgramme o=new GvProgramme();

BeanUtils.copyProperties(o, stp);

6. 属性过滤器PropertyFilter

System.out.println(jsonObject.toString());

7. 简单属性过滤器setExclusions法

2.第二种方法通过jsonconfig实例,对包含和需要排除的属性进行方便添加删除

[java]view plaincopyprint?

5 public class Person {<br>

6    private String name;<br>

7    private String lastname;<br>

8    private Address address;<br>

9  <br>

10    // getters & setters<br>

11 }<br>

12  <br>

13 JsonConfig jsonConfig = new JsonConfig();<br>

14 jsonConfig.setExclusions( new String[]{ "address" } );<br>

15 Person bean = /* initialize */;<br>

16 JSON json = JSONSerializer.toJSON( bean, jsonConfig );

注意:这种方法不区分目标类,就是说如果有2个bean当中都存在“address”属性,那么采用这种方法,这两个bean中的address属 性都将被排除

3. 使用propertyFilter可以允许同时对需要排除的属性和类进行控制,这种控制还可以是双向的,也可以应用到json字符串到java对象

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){

LibtypeDAO libtypeDAO = new LibtypeDAO();

List<Libtype> list = libtypeDAO.findAll();

JsonConfig jsonConfig = new JsonConfig();  //建立配置文件

jsonConfig.setIgnoreDefaultExcludes(false);  //设置默认忽略

jsonConfig.setExcludes(new String[]{"libs"});  //此处是亮点,只要将所需忽略字段加到数组中即可,在上述案例中,所要忽略的是“libs”,那么将其添到数组中即可,在实际测试中,我发现在所返回 数组中,存在大量无用属性,如“multipartRequestHandler”,“servletWrapper”,那么也可以将这两个加到忽略数组 中.

8. JsonBeanProcessor法

4. 最后来看JsonBeanProcessor,这种方式和实现JsonString很类似,返回一个代表原来的domain类的合法JSONOBJECT

1.设置JSON-LIB让其过滤掉引起循环的字段:

9. 设置JSON-LIB的setCycleDetectionStrategy属性让其自己处理循环(ati测试不生效O81)..

2.

3.省事但是数据过于复杂的话会引起数据溢出或者效率低下。

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){

LibtypeDAO libtypeDAO = new LibtypeDAO();

List<Libtype> list = libtypeDAO.findAll();

JsonConfig jsonConfig = new JsonConfig(); //建立配置文件

jsonConfig.setIgnoreDefaultExcludes(false); //设置默认忽略

种方法有些悲剧,虽然可以使用,但其结果貌似循环数次,至于为啥,还请高人指点。

JSONArray jsonArray = JSONArray.fromObject(list,jsonConfig); //加载配置文件

return null;

}

3.

10. 参考

关于json-lib There is a cycle in the hierarchy!问题的3种解决办法_威廉庄园_williambryantliu的和讯博客.htm

使用json-lib完成json的序列化和反序列化 - 话别深秋 - 博客频道 - CSDN.NET.htm

hibernate中lazy的使用 - TOYOE - 博客园.htm

atitit.解决net.sf.json.JSONException There is a cycle in the hierarchy的更多相关文章

  1. net.sf.json.JSONException: There is a cycle in the hierarchy!错误解决方案

    net.sf.json.JSONException: There is a cycle in the hierarchy!错误解决方案 今天在用List集合转换成json数组的时候发生了这个错误,这个 ...

  2. net.sf.json.JSONException: There is a cycle in the hierarchy!

    因为项目中使用了AJAX技术,jar包为:json-lib.jar,在开发过程中遇到了一个JSON-LIB和Hibernate有关的问题: 如hibernate延迟加载错误,这都是些老问题了,一看就知 ...

  3. net.sf.json.JSONException: There is a cycle in the hierarchy!的解决办法

    使用Hibernate manytoone属性关联主表的时候,如果使用JSONArray把pojo对象转换成json对象时,很容易出现循环的异常.解决的办法就是, 在转换json对象时忽略manyto ...

  4. json-lib-2.4-jdk15.jar 报错 net.sf.json.JSONException: There is a cycle in the hierarchy!错误解决方案(Hibernate)

    使用hibernate容易出现该问题,主要是由于pojo类属性存在级联关系.比如说员工和部门,在员工表里面有部门属性,而在部门表里面有个员工集合,这样就存在了嵌套引用的问题了,就会抛出这个异常. 解决 ...

  5. net.sf.json.JSONException: There is a cycle in the hierarchy! 转json死循环问题解决

    解决上述问题遵照两个原则就可以: 1.页面不需要展示关联数据时 解决:将关联对象属性排除掉 2.页面需要展示关联数据时 解决:将关联对象改为立即加载,并且将关联对象中的属性排除

  6. Json_异常_net.sf.json.JSONException: JSONObject["solution"] not found.

    net.sf.json.JSONException: JSONObject["solution"] not found. 没有这个元素造成的. 问题代码: JSONObject j ...

  7. net.sf.json.JSONException: java.lang.NoSuchMethodException

    在尝试将json对象转换为list时候出现了如下错误 Exception in thread "main" net.sf.json.JSONException: java.lang ...

  8. XML2JSON 的【net.sf.json.JSONException: nu.xom.ParsingException must be followed by either attribute specifications, ">" or "/>"】问题解决办法

    在使用JSon-Lib库进行XML2JSon的转换时,在JUnit测试时没有什么问题,但是在Tomcat里面跑的时候,抛出了下面的异常,查找了google,发现关于这方便的文章比较少,即使有,也需要F ...

  9. json数据转换异常:net.sf.json.JSONException: java.lang.reflect.InvocationTargetException

    转:json数据转换异常:net.sf.json.JSONException: java.lang.reflect.InvocationTargetException 执行:JSONArray arr ...

随机推荐

  1. Java interview Advanced

    1. Can you override private or static method in Java ? Read more: http://java67.blogspot.com/2012/09 ...

  2. 手把手教你用axis1.4搭建webservice(转)

    1.先下载axis jar包:axis-bin-1_4.zip.下载地址: http://ws.Apache.org/axis/. 当然这个包其实是不全面的,像activation.jar之类的,完全 ...

  3. HTML5和CSS3基础教程(第8版)-读书笔记(2)

    第7章 CSS构造模块 7.1 构造样式规则 样式表中包含了定义网页外观的规则.样式表中的每条规则都有两个主要部分:选 择 器(selector) 和 声 明 块(declaration block) ...

  4. ZT 趋势移动安全apk

    趋势移动安全 应用截图   应用简介 趋势移动安全( Mobile Security) 是一款专业的Android移动安全软件.利用趋势科技世界领先的云安全技术,保护用户避免被移动恶意程序骚扰,避免个 ...

  5. 判断闰年的方法以及如何获得单链表的倒数第K个元素

    今天很悲催,心中向往的公司,打电话过来面试,问到我两个问题,结果竟然都没有回答上,伤心了,记录下今天失败,希望以后不要被同样的问题给PASS. 问题1.如何判断是否为闰年 所谓闰年那就是:四年一闰,百 ...

  6. [转] 关于linux下通过shell命令(自动)修改用户密码

    关于linux下通过shell命令(自动)修改用户密码 2012-04-23 18:47:39 分类: 原文地址:关于linux下(自动)修改用户密码 作者:ubuntuer 本文章总结了如何手动.自 ...

  7. js获取当前页面信息

    设置或获取对象指定的文件名或路径.<script>alert(window.location.pathname)</script> 设置或获取整个 URL 为字符串.<s ...

  8. JProfiler使用入门(一)——准备工作

      JProfiler是一个全功能的Java剖析工具(profiler),主要用于检查和跟踪系统(限于Java开发的)的性能. JProfiler可以通过时时的监控系统的内存使用情况,随时监视垃圾回收 ...

  9. js点击按钮倒计时setTimeout和setInterval

    setTimeout() 用于在指定的毫秒数后调用函数或计算表达式,只执行 code 一次. setInterval() 可按照指定的周期(以毫秒计)来调用函数或计算表达式,不停地调用函数,直到 cl ...

  10. Linux如何学习

    一:如何提问 1. 尝试自己解决 帮助文档 示例 2. 提问的要求 问题要详细(能被别人看懂, 一个知识点) 报错信息(截图) 二:1.Linux区分大小写 2.所有内容以文件形式保存,包括硬件(一切 ...