关于一种fastjson的死循环情况记录

最近在一次项目中,使用fastjson做接口转换中,碰到了一个Stack Overflow。发现在getxxx方法内如果再次嵌套使用fastjson作json转换,就会无限循环。

错误实例:

1 class IAmStupid{
2     private String a;
3     public String getJson(){
4         return JSON.toJSONString(this);
5     }    
6 }

原因:fastjson底层获取bean数据序列化时,在ASMSerializerFactory的createJavaBeanSerializer方法中,会获取bean的getter方法。然后调用get方法获取数据,在调用getJson时,会再次进入this的序列化,依次循环嵌套,最终栈溢出。

有兴趣的可以试一下,并跟进代码。

原文地址:https://www.cnblogs.com/code-juggler/p/8625889.html