Caused by: java.lang.StackOverflowError: null 的解决办法


问题概述:

关于这个问题呢,是在项目开发的过程中不知道哪根筋抽搐了一下迷迷糊糊范的一个低级错误,幸好发现的及时,不然后果严重呀。。。
注:所有数据表通过集成JPA的方式,将实体映射到关系型数据库中的。
异常信息如下:

org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) 
Caused by: java.lang.StackOverflowError: null
    at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_40]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760) ~[na:1.8.0_40]
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_40]
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) ~[na:1.8.0_40]
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73) ~[na:1.8.0_40]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368) ~[na:1.8.0_40]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[na:1.8.0_40]
    at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_40]
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[na:1.8.0_40]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_40]
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0_40]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_40]

部分截图如下:
这里写图片描述


解决办法:

这个问题的发现,还要感谢测试组的工作人员,在测试的时候在每个数据表中都添加了大量的数据,才有让我及时的马上的发现了这个问题。
在接口写完后,测试时,就发现 StackOverflowError ,然后一调试就发现了问题,遇到一个多对多的关系,就引出了递归调用+死循环 ,所以在查询的时候一定要注意这个问题,当表的字段和数据量较小时,很难发现。

在其它各层的数据操作中都没有问题,就是在类型转换的时候就出现了问题。

要避免这个问题很简单,只需要不是用原来的映射实体,重新构建一个实体专门作为该数据的承载体,需要什么字段在映射的实体中提取,然后封装到该数据的载体中就可以了。


好了,关于Caused by: java.lang.StackOverflowError: null 的解决办法 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。

  • 6
    点赞
  • 4
    收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:Age of Ai 设计师:meimeiellie 返回首页
评论 10

打赏作者

Hello_World_QWP

海内存知己,天涯若比邻!

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值