[轉載]內部類反序列化問題(fastjson exception: create instance error)

一、問題

項目開發過程中遇到了JSON反序列化問題(JSONException: create instance error),問題如下:

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

由問題可見,fastjson反序列化時嘗試創建ClassA的內部類ClassB失敗。測試內部類聲明如下:

@Data
public class ClassA {

    private String filedA1;

    private String fieldA2;

    private List<ClassB> fieldA3s;

    @Data
    public class ClassB {

        private String fieldB1;

        private String filedB2;
    }
}

測試代碼如下:

public class TestA {

    @Test
    public void testParseA(){
        String str = "{\"fieldA2\":\"test field A2\",\"fieldA3s\":[{\"fieldB1\":\"test field B1\",\"filedB2\":\"test "
            + "field B2\"}],\"filedA1\":\"test field A1\"}\n";

        ClassA classA = JSON.parseObject(str, ClassA.class);

        System.out.println(JSON.toJSONString(classA));
    }

    @Test
    public void testParseB() {
        String str = "{\"fieldB1\":\"test field B1\",\"filedB2\":\"test field B2\"}";

        ClassB classB = JSON.parseObject(str, ClassB.class);

        System.out.println(JSON.toJSONString(classB));
    }

二、嵌套類與內部類

查看了fastjson官方問題解釋:點擊查看,問題本質爲內部類無法實例化,導致fastjson反序列化失敗。

點擊查看:《Java嵌套類與內部類》

三、解決方案

Java嵌套類與內部類一文分析可知,非靜態成員嵌套類的實例化依賴於外部類實例,而靜態嵌套類的實例化不依賴於外部類,將內部類改爲靜態嵌套類即可。


作者:Jerry的技術博客
來源:CSDN
原文:https://blog.csdn.net/xktxoo/article/details/78175997
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章