今天程序中突然出现一个bug,报告的是栈溢出的错Infinite recursion (StackOverflowError),问题如下截图:

经排查是整改json将对象转为字符串时出现的,报错的原因是无限递归所导致的栈溢出,但是梳理后程序中也没有其他贴子写的,对象包含对象本身的list,或者对象包含对象本身。因为错误是在工具类中捕获,于是,我们使用注解@SneakyThrows放开了工具类中的异常,报错又改为以下内容。

com.fasterxml.jackson.databind.JsonMappingException: getOutputStream() has already been called for this response (through reference chain: org.apache.catalina.connector.ResponseFacade[1]->org.apache.catalina.connector.ResponseFacade["writer"])at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:397)at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:356)at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:316)at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:763)at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serializeContents(ObjectArraySerializer.java:252)at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:213)at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serialize(ObjectArraySerializer.java:22)at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)at com.fasterxml.jackson.databind.ObjectMapper._writeValueAndClose(ObjectMapper.java:4407)at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3661)

最终,锁定为日志输出的一行代码:

log.info("result{}",jsonUtil.toJson(result))

最后我们发现,是因为结果中包含了返回给前端的重定向属性,response,如下:

response.sendRedirect(url);

点开response后发现,response里面是自己包含自己的。自此,问题排查出来。

最后总结:

根本原因还是无限递归

首先,检查自己的类,是否自己包含自己还被转为字符串;

其次,debug检查存放有request和response的对象是否被转字符串使用。

栈溢出:Infinite recursion (StackOverflowError)相关推荐

  1. Could not write JSON: Infinite recursion (StackOverflowError);

    转自:https://blog.csdn.net/east123321/article/details/80435051 在controller返回数据到统一json转换的时候,出现了json inf ...

  2. JPA HttpMessageNotWritableException: Could not write content: Infinite recursion (StackOverflowError

     一.异常信息 正常查询数据没有问题,但是在以json形式返回到前端会出现此异常 WARN 22788 --- [nio-8081-exec-2] .w.s.m.s.DefaultHandlerExc ...

  3. Could not write JSON: Infinite recursion (StackOverflowError) (through reference chain:

    环境:springmvc+hibernate 返回json格式的数据 在controller返回数据到统一json转换的时候,出现了json infinite recursion stackoverf ...

  4. JsonMappingException Infinite recursion StackOverflowError

    报错信息 java.lang.RuntimeException: com.fasterxml.jackson.databind.JsonMappingException: Infinite recur ...

  5. 返回JSON出现Infinite recursion无限循环错误的解决

    在数据库返回树形结构数据之后,想转换成JSON返回页面时出错: org.springframework.http.converter.HttpMessageNotWritableException: ...

  6. SpringBoot之解决一对一、多对一、多对多等关联实体在JSON序列化/输出时产生的无限递归死循环问题(infinite recursion)

    SpringBoot之解决一对一.多对一.多对多等关联实体在JSON序列化/输出时产生的无限递归死循环问题(infinite recursion) 参考文章: (1)SpringBoot之解决一对一. ...

  7. 关于Infinite recursion detected

    在我之前的一篇博文中<基于struts2 拦截器ResultType为chain的Action之间数据传递 --表单页面打开优化>提到使用chain类型的action之间传递数据用以优化表 ...

  8. 【错误记录】Groovy 函数拦截调用 invokeMethod 导致栈溢出 ( java.lang.StackOverflowError )

    文章目录 一.报错信息 二.解决方案 一.报错信息 使用 Groovy 函数拦截功能 , 定义 Groovy 类 , 实现 GroovyInterceptable 接口 , 并重写 invokeMet ...

  9. JPA 中使用 @OneToMany 、@ManyToOne 等关系映射注解

    JPA 做 ORM(Object Relational Mapping,对象关系映射)时,为了开发效率,通常会在实体类上用 hibernate 的关系关联注解. 包括:@OneToOne. @OneT ...

最新文章

  1. php模拟post上传图片,php模拟post上传图片解决方法
  2. libopencv_core.so: file not recognized: File format not recognized
  3. wifi定位算法 java_记一次APP的so层算法逆向(七)
  4. codefirst 兼容oracle,EF6+MVC5之Oracleo数据库的CodeFirst方式实现
  5. SAP Spartacus buildCmsStructure 构建逻辑
  6. VS2010自定义新建文件模版
  7. Nginx网站用户认证
  8. C语言运算符的优先级及结合性
  9. LeetCode 164. 最大间距
  10. PHP curl 直接获取请求变量,不直接输出
  11. 白话容器namespace
  12. 手机HiFi嗨不嗨 看完这些才能算是入坑
  13. java 文件上传(使用多线程)
  14. mysql localhost无法连接
  15. 计161--Problem H: 求三角形面积-gyy
  16. 这样的也可以发.....
  17. 北邮智能车仿真培训(七)—— 使用c++编写程序
  18. html语言中kbd的含义,HTML kbd键盘元素
  19. PCB布局布线技巧总结
  20. 文科背景去德国学计算机,文科生留学德国的现状是怎样的

热门文章

  1. 如何使用Lumberyard制作特效[【1】——Overview
  2. 随身理财专家“挖财”推iPad应用,新增帐号对比功能
  3. pycharm运行报错:Process finished with exit code -1073741515 (0xC0000135)
  4. 内容为王时代的 “内容策略师”职位描述、角色和职责
  5. html表格自动变色,如何设置实现Excel单元格自动变色?动图演示更详细
  6. 国家气象局免费天气预报接口,城市代码(JSON格式)
  7. xwiki功能-皮肤
  8. V4L2视频驱动框架---meida_device管理模块简述
  9. 计算机关机重启命令,怎么使用dos命令重启电脑?用dos命令重启电脑关机的方法...
  10. dialog弹框通过自定义指令实现可拖拽位移功能