JSON数据转Java对象遇到异常JSONException: create instance error

发布于:2022-11-29 ⋅ 阅读:(590) ⋅ 点赞:(0)

本文是转载,仅用于学习,文章转载出处

一、问题

项目开发过程中遇到了JSON反序列化问题(JSONException: create instance error),问题如下:

...
com.alibaba.fastjson.JSONException: create instance error, class com.test.xiaofan.test.ClassA$ClassB
...

由问题可见,fastjson反序列化时尝试创建ClassA的内部类ClassB失败。需要在内部类加上 static来声明静态嵌套类的实例化不依赖于外部类,即是将内部类改为静态嵌套类。

@Data
public class ClassA {

    private String filedA1;

    private String fieldA2;

    private List<ClassB> fieldA3s;

    @Data
    public static class ClassB {

        private String fieldB1;

        private String filedB2;
    }
}

二、嵌套类与内部类

查看了fastjson官方问题解释:点击查看,问题本质为内部类无法实例化,导致fastjson反序列化失败。

点击查看:《Java嵌套类与内部类》

三、解决方案

由Java嵌套类与内部类一文分析可知,非静态成员嵌套类的实例化依赖于外部类实例,而静态嵌套类的实例化不依赖于外部类,

需要在内部类添加修饰符static将内部类改为静态嵌套类即可。