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

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

描述一下问题起源。

我想用从页面发送一个异步请求到服务器,服务器给我返回一个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. weblogic cluster error-----Could not= open connection with host: 127.0.0.1

    weblogic主机及一台从机启动成功后,在启动从机的时候报错, <BEA-000905> <Could not open connection with host: 127.0.0 ...

  2. Java入门系列-16-继承

    这一篇文章教给新手学会使用继承,及理解继承的概念.掌握访问修饰符.掌握 final 关键字的用法. 继承 为什么要使用继承 首先我们先看一下这两个类: public class Teacher { p ...

  3. SSRS使用MySql作为数据源遇到的问题。

    因为工作需求,SSRS需要取到MySql数据源,还好有了ODBC. 谷歌了很多,都是不完整的Solution,放上完整版的供大家评价参考. 下面是StepByStep. 问题1.使用ODBC数据源,填 ...

  4. 解决JVM内存溢出问题

    今天遇到了一个问题,当我在增加配置文件(*.xml)内容的时候,重新启动tomcat6时,控制台报错:java.lang.StackOverflowError: 即,栈溢出错误. 内存溢出,即程序运行 ...

  5. Bazaar 版本控制工具

    Bazaar是一个分布式的版本控制系统,它发布在GPL许可协议之下,并可用于Windows.GNU/Linux.UNIX以及Mac OS系统.Bazaar由Canonical公司赞助,目前已服务于Sa ...

  6. ComfortColor.xcs

    ComfortColor.xcs [comfort color] text=dce2e2text(bold)=dce2e2 magenta=dd3682magenta(bold)=dd3682 whi ...

  7. unity3d之相机跟随人物

    一.第三人称视角 _1 先设置好相机与玩家之间的角度 给相机添加代码 using UnityEngine; using System.Collections; namespace CompletePr ...

  8. k8s安装部署过程个人总结及参考文章

    以下是本人安装k8s过程 一.单机配置 1. 环境准备 主机名 IP 配置 master1 192.168.1.181 1C 4G 关闭所有节点的seliux以及firewalld sed -i 's ...

  9. thinkphp下mysql用用户名或者手机号登录

    $res=$user->where("login_id='{$username}' OR phone='{$username}'")->find(); $phone=I ...

  10. 第8章 CSS3中的变形与动画(上)

    变形--旋转 rotate() 旋转rotate()函数通过指定的角度参数使元素相对原点进行旋转.它主要在二维空间内进行操作,设置一个角度值,用来指定旋转的幅度.如果这个值为正值,元素相对原点中心顺时 ...