这里会认为jsonStr是实体类的一个属性,然后就递归报错了。当然正常可能也不会这么写。
import lombok.Data;
@Data
public class JSONTest {
private int xx;
private int yy;
private int zz;
public String getJson() {
return JSON.toJSONString(this);
}
public static void main(String[] args) {
JSONTest test = new JSONTest();
test.getJson();
}
}
Exception in thread "main" java.lang.StackOverflowError
"这里又发现这个编辑器有问题吧,我本来是两个代码块儿,自动就把中间的忽略了"
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从您提供的代码片段来看,问题在于使用了 Lombok 的 @Data
注解和 Fastjson(通过 JSON.toJSONString(this);
)来生成 JSON 字符串。当 Lombok 的 @Data
注解应用于类上时,它会为类的每个字段自动生成 getter 和 setter 方法。在您的 getJson()
方法中调用 JSON.toJSONString(this)
会导致 Fastjson 尝试序列化整个对象,包括调用由 Lombok 自动生成的 getter 方法。
如果您的类中有引用了该类本身的成员变量(例如,一个自引用或者循环引用的情况),这将导致无限递归,从而引发 java.lang.StackOverflowError
。但从您给出的 JSONTest
类定义来看,并没有这样的自引用情况。
根据您的描述,“这里又发现这个编辑器有问题吧,我本来是两个代码块儿,自动就把中间的忽略了”,似乎暗示实际代码中可能存在未展示的部分,比如某个字段类型是指向 JSONTest
类本身的引用,这才是导致递归错误的原因。
解决方法:
@JSONField(serialize=false)
注解来标记不需要序列化的属性,或者使用 SerializeConfig
配置来忽略循环引用的字段。由于您提到的“编辑器问题”可能导致信息丢失,如果上述分析不适用,请提供完整的代码段,以便进行更准确的诊断。