上午经理发来一个任务,解决某个接口异常,此接口第一次调用成功返回:
{ret=Y, orderResultList=[{itemno=31920190521083622032, sub_msg=成功, isSuccess=true}]}
再次调用则全部返回:
Exception when eval result.toString:null
查看日志:是StackOverflowError
找到对应的xxxxxServiceImpl,看到几行代码:
从而找到此方法调用的地方:
继续浏览代码,看到:
恍然大悟,原来如此。
result和orderResultList用的是引用传递,他俩相互引用造成了toString解析结构异常,从而造成StackOverflowError,
最终演变成了我看到的【Exception when eval result.toString:null】。
关于java引用传递和值传递,看下面这篇文章:
https://www.cnblogs.com/xiaoxiaoyihan/p/4883770.html
现在修正代码,改成如下:
小结:此bug埋的精巧,看代码容易一眼带过,所以我用了近乎半天的时间。一是自身能力不足(上方内容若有误,恳请不吝指出),二是项目不熟悉,情绪焦躁,排斥看代码。
over!