一、問題
項目開發過程中遇到了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
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!