最近在一次项目中,使用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的序列化,依次循环嵌套,最终栈溢出。
有兴趣的可以试一下,并跟进代码。