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

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

描述一下问题起源。

我想用从页面发送一个异步请求到服务器,服务器给我返回一个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. tomcat绑定域名绑定端口及更换ROOT目录

    一.更换ROOT目录 tomcat默认网站目录为 webapps/ROOT ,那么我们如何改为自己的网站目录呢? 1.打开并编辑tomcat目录下的 conf/server.xml 大约在148行的位 ...

  2. pm2在node中的应用

    pm2 是一个带有负载均衡功能的Node应用的进程管理器,当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, pm2是完美的. 主要特性: 内建负载均衡(使用Nod ...

  3. 生成自签名证书-开启https

    1.生成CA证书 # 生成 CA 私钥 openssl genrsa -out ca.key 2048 # X.509 Certificate Signing Request (CSR) Manage ...

  4. Filter---javaweb的过滤器

    1.Filter是什么? Filter的基本功能是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理的前后实现一些特殊的功能. 在Servlet API中定义了三个 ...

  5. [Java反射基础三]方法反射的基本操作

    本文接上文“获取类的信息”,利用反射(invoke)来获取一个类中的方法来执行. 1.定义一个类,包含三个名称相同,参数不同的方法 class A{ public void print(){ Syst ...

  6. SQL2008使用with求余额表,流水账方式

    1.先准备数据,将要求余额的表数据插入临时表 SELECT Serial, VoucherNum, SubjectNum, SubjectName, Direction, Amount INTO #T ...

  7. 关于iframe中使用fixed定位的一些问题

    先来看看position: fixed:的定义:生成绝对定位的元素,相对于浏览器窗口进行定位: 但是在iframe中使用fixed定位,实际上是相对于iframe窗口进行定位,原因在于iframe类似 ...

  8. AngularJS模块之$scope

    Angular中创建一个模块: angular.module("myApp",[]). controller("myController",function(& ...

  9. 拖动条SeekBar

    1TextView tv=(TextView)findViewById(R.id.TV); 2 tv.setMovementMethod(ScrollingMovementMethod.getInst ...

  10. MySQL数据库学习笔记<一>

    MySQL基本概念以及简单操作   一.MySQL   MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系 ...