反序列化报错:非静态内部类仅能通过无参构造实例化问题排查
问题分析
报错信息明确指出非静态内部类只能通过无参默认构造实例化,但你添加无参构造后仍报错,核心原因是:MyObject是非静态内部类(嵌套在测试类或其他类内部),Jackson无法直接实例化这类类——非静态内部类的实例必须依赖外部类实例,而Jackson默认不会自动创建外部类实例来初始化它。
解决方案
两种直接有效的修复方式:
1. 将MyObject改为静态内部类
在MyObject的类定义前添加static修饰符,消除对外部类实例的依赖:
public static class MyObject { public int value1; public String value2; }
2. 将MyObject改为独立顶级类
把MyObject从当前嵌套的类中抽出来,作为单独的Java文件(比如MyObject.java),成为独立的顶级类:
// MyObject.java public class MyObject { public int value1; public String value2; }
验证说明
修改后重新运行测试代码,Jackson就能正常完成MyObject[]数组的反序列化。因为静态内部类或顶级类属于独立类型,无需外部类实例即可被Jackson通过无参构造创建对象。
内容的提问来源于stack exchange,提问作者Silny ToJa
相关产品推荐
相关产品推荐

