重要的事情放在最前面,,以后不管遇到什么异常都一定要把异常读懂再想办法怎么解决,把异常读懂,异常读懂。。。。。。

这个异常我记得以前遇到过,而且好像已经做了笔记,,,,,今天翻了一下竟然没有,,,,,真是****

描述一下问题起源。

我想用从页面发送一个异步请求到服务器,服务器给我返回一个List对象(List<Duty>职务列表)。服务器需要把这个List对象转换成JSON格式返回。。。恩,,发送请求也没问题,已经到Controller里面的方法了,方法顺利处理,但是controller方法返回List对象的时候出现了错误。。。。。。。报了如下错误:(这个异常非常长,因为发生的是递归错误,但是重要的是前面一两句话,所以只贴最重要的。)

org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: Infinite recursion (StackOverflowError) (through reference chain: com.pms.entities.base.Duty["dutyInfos"]->org.hibernate.collection.internal.PersistentSet[0]->com.pms.entities.personnelManage.DutyInfo["duty"]->com.pms.entities.base.Duty["dutyInfos"]->org.hibernate.collection.internal.PersistentSet[0]->com.pms.entities.personnelManage.DutyInfo["duty"]->com.pms.entities.base.Duty["dutyInfos"]->org.hibernate.collection.internal.PersistentSet[0]->com.pms.entities.personnelManage.DutyInfo["duty"]->com.pms.entities.base.Duty["dutyInfos"]->org.hibernate.collection.internal.PersistentSet[0]->com.pms.entities.personnelManage.DutyInfo["duty"]->com.pms.entities.base.Duty["dutyInfos"]-后面的省略。。。。。。。。。。

解读一下这个异常:

Infinite recursion 是什么意思???---->无限递归..恩。。无限递归导致StackOverflowError。。。through reference chain

问题大概已经清楚了,,,是因为Duty持有DutyInfo的引用,而DutyInfo的又持有Duty的引用。。。所以当Controller方法返回List对象的时候,需要把列表中的对象转化为json 格式的数据,,当将一个Duty对象转为json格式的时候需要把duty对象里面的DutyInfo属性也转化,在转化DutyInfo对象的时候又因为DutyInfo中持有Duty的引用,又要将duty对象转为json,,,那么因为你引用我,我又引用你造成了无限递归。。。。。。。

那么如何解决呢???

只要双方有其中一方在转为json的时候忽略掉另一方这个引用,那么引用链就断掉了无法形成递归,比如我的Duty中有一个Set<DutyInfo>属性。我在转为json的时候忽略掉它。。。。即可解决。。因为我需要返回的数据刚好不需要Set<DutyInfo>这个属性的数据。

具体怎么做???在Duty类中的private Set<DutyInfo> dutyInfos; 上面加上@JsonIgnore这个注解即可。。。。。。。。。

这个错误已经犯两次了。。。再犯剁**

一个关于JSON的异常,获取List对象失败的。。。的更多相关文章

  1. jackson使用问题:mapper.readValue()将JSON字符串转反序列化为对象失败或异常

    问题根源:转化目标实体类的属性要与被转JSON字符串总的字段 一 一对应!字符串里可以少字段,但绝对不能多字段. 先附上我这段出现了问题的源码: // 1.接收并转化相应的参数.需要在pom.xml中 ...

  2. 在SpringMVC中获取request对象的几种方式

    1.最简单的方式(注解法) @Autowired private HttpServletRequest request; 2.最麻烦的方法 a. 在web.xml中配置一个监听 <listene ...

  3. .net从网络接口地址获取json,然后解析成对象(一)

    整理代码,今天遇到一个问题,就是从一个场景接口获取json,然后解析成对象.之前的时候都好好的,这次返回的json字符串里,由于字符编码的问题,格式上不能转换.一直以为是解析的过程编码有误,试了utf ...

  4. 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法

    今天遇到了一个在servlet的service方法中获取ServletContext对象出现java.lang.NullPointerException(空指针)异常,代码如下: 1 //获取Serv ...

  5. .net从网络接口地址获取json,然后解析成对象(二)

    整理代码,这是第二种方法来读取json,然后反序列化成对象的,代码如下: public static Order GetOrderInfo(string _tid, string _orderNo) ...

  6. 做一个类似JQuery获取DOM对象的$()

    在dom操作时,有时根据id获取单个对象.有时根据className获取多个对象.平常可能我们用两个函数来实现这两个功能.不过我将它们整合了一下,目前使用情况良好,函数如下: view source ...

  7. 如何构建JSON数据,JSON数据的格式,JSON数据的获取

    假设你是用$.getJSON();方法获取JSON数据$.getJSON(url,{"Action":"getStudent"},function(data){ ...

  8. .net core 1.1.0 MVC 控制器接收Json字串 (JObject对象) (二)

    .net core 1.1.0 MVC 控制器接收Json字串 (JObject对象) (二) .net core 1.1.0 MVC 控制器接收Json字串 (JObject对象) (一) 上一篇主 ...

  9. JSON C# Class Generator是一个从JSON文本中生成C#内的应用程序

    JSON C# Class Generator是一个从JSON文本中生成C#内的应用程序 .NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator   ...

随机推荐

  1. FocusBI:SSAS体系结构(原创)

    关注微信公众号:FocusBI 查看更多文章:加QQ群:808774277   获取学习资料和一起探讨问题. SSAS是微软BI组件系列中最核心的组件,商业智能的心脏所有的数据都从这里统一输出,它能把 ...

  2. How Religion Destroys Programmers--ref

    http://simpleprogrammer.com/2013/07/08/how-religion-destroys-programmers/ discovered something about ...

  3. C#操作Redis Hash数据表

    /// <summary> /// Redis Hash /// </summary> public static void Redis_Hash() { RedisClien ...

  4. 标准webservice调用

    现代定义的webservice一般都倾向于restfull风格的http请求,但工作中还是会遇到前辈们写的时代代码. 我们更倾向于封装代码来调用,而不是服务引用.请看: Service.asmx服务的 ...

  5. PHP之数组和函数的基本教程

    [PHP数组的分类] 按照下标的不同,PHP数组分为关联数组与索引数组 索引数组:下标从0开始,依次增长: 关联数组:下标为字符串格式,每个下标字符串与数字的值一一关联对应(有点像对象的键值对) [关 ...

  6. C#泛型List的介绍

    一.List<T>描述 1).表示可通过索引访问的对象的强类型列表:提供用于对列表进行搜索.排序和操作的方法.2).是ArrayList类的泛型等效类.3).可以使用一个整数索引访问此集合 ...

  7. C#基础 (一)

    值类型和引用类型 堆和栈 栈存放的数据: (1)某些类型变量的值(2)程序当前的执行环境(3)传递给方法的参数 堆是存放对象的地方 对象类型有两种: 值类型和引用类型,他们的存储方式不同值类型: 只需 ...

  8. Linux+Git命令

    Linux 文件与目录 cd命令: $ cd [path] //path为路径名称,这只是常规语法 1 详细用法如下: $ cd /d //进入d盘 $ cd d: //进入d盘 $ cd D: // ...

  9. FLASK实现上传下载功能

    #!-*-coding=utf-8-*- # from flask import Flask # # app = Flask(__name__) # # # @app.route('/') # def ...

  10. 排序算法Nb三人组-归并排序

    归并排序只能对两个已经有序的列表进行合并排序,所以要我们自己创建出两个有序列表.最后在进行合并. def merge2list(li1, li2): li = [] i = 0 j = 0 while ...