目录
原因:
这个错误通常是因为在使用Gson或Jackson等JSON解析库将JSON字符串转换为Java对象时,Java对象中包含了非静态内部类(即嵌套类),而解析库无法创建非静态内部类的实例导致的。
非静态内部类是依赖于外部类的实例存在的,因此在创建非静态内部类的实例时,需要先创建外部类的实例。而JSON解析库在创建Java对象时,只会调用Java类的默认构造函数来创建对象,而不会创建外部类的实例,因此无法创建非静态内部类的实例。
解决这个问题的方法有两种:
-
将非静态内部类改为静态内部类或单独的外部类,这样就可以直接创建对象了。
-
自定义一个JsonDeserializer来处理非静态内部类的反序列化。具体来说,需要在JsonDeserializer中手动创建外部类的实例,并将其传递给非静态内部类的构造函数来创建对象。以下是一个示例代码:
public class MyDeserializer implements JsonDeserializer<MyClass> {
@Override
public MyClass deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject jsonObject = json.getAsJsonObject();
String name = jsonObject.get("name").getAsString();
int age = jsonObject.get("age").getAsInt();
JsonObject innerObject = jsonObject.get("inner").getAsJsonObject();
InnerClass inner = context.deserialize(innerObject, InnerClass.class);
MyClass myClass = new MyClass(name, age, inner);
myClass.setOuter(new OuterClass());
return myClass;
}
}
测试小问题:
我在一个test类 里面 创建了main方法, 然后创建了一个内部类 A
然后main方法 里面把data Object数据转为指定的A对象格式 映射, A内部类没有加上Static(没注意给啥时候 static 被我弄掉了, 大意了)
JSON.toJSONString(data), A.class);