欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-15 14:37:57
...

问题概述:

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

org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (*Error); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (*Error) 
Caused by: java.lang.*Error: 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]

部分截图如下:
Caused by: java.lang.*Error: null 的解决办法


解决办法:

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

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

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


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