尝试使用 GSON 将 Java 对象转换为 JSON 字符串时出错
Error when trying to convert Java object to JSON string using GSON
我有一个带有字段(字符串品牌和名称、int ram 和 rom)的对象 MobilePhone,我想将其转换为 Json 字符串。我试着这样做
public static void main(String[] args) {
MobilePhone mp = new MobilePhone();
mp.setBrand("iPhone");
mp.setName("X");
mp.setRam(4);
mp.setRom(1);
Gson json = new Gson();
String object = json.toJson(mp);
System.out.println(object);
}
我收到以下错误:
Exception in thread "main" java.lang.reflect.InaccessibleObjectException: Unable to make public (package name).MobilePhone() accessible: module (project name) does not "exports (package name)" to module gson
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:349)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:289)
at java.base/java.lang.reflect.Constructor.checkCanSetAccessible(Constructor.java:189)
at java.base/java.lang.reflect.Constructor.setAccessible(Constructor.java:182)
at gson@2.8.2/com.google.gson.internal.ConstructorConstructor.newDefaultConstructor(ConstructorConstructor.java:101)
at gson@2.8.2/com.google.gson.internal.ConstructorConstructor.get(ConstructorConstructor.java:83)
at gson@2.8.2/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:99)
at gson@2.8.2/com.google.gson.Gson.getAdapter(Gson.java:423)
at gson@2.8.2/com.google.gson.Gson.toJson(Gson.java:661)
at gson@2.8.2/com.google.gson.Gson.toJson(Gson.java:648)
at gson@2.8.2/com.google.gson.Gson.toJson(Gson.java:603)
at gson@2.8.2/com.google.gson.Gson.toJson(Gson.java:583)
at IAssessment/application.AddData.main(AddData.java:23) - this is line String object = json.toJson(mp);
请帮忙
如错误所示,包含 MobilePhone
class 的模块不会导出包含 MobilePhone
的包,因此它在其自身模块之外是不可见的。 (或者如果是导出的话,也只是导出到gson以外的一些模块。)一般来说这意味着你必须在模块描述符文件中添加一个exports
指令,像这样:
exports <pkg-name> to gson;
但是由于 gson 广泛使用反射,您可能需要更进一步,为 gson 提供包的私有和反射访问。为此,将 opens
指令添加到模块描述符文件中:
opens <pkg-name> to gson;
我有一个带有字段(字符串品牌和名称、int ram 和 rom)的对象 MobilePhone,我想将其转换为 Json 字符串。我试着这样做
public static void main(String[] args) {
MobilePhone mp = new MobilePhone();
mp.setBrand("iPhone");
mp.setName("X");
mp.setRam(4);
mp.setRom(1);
Gson json = new Gson();
String object = json.toJson(mp);
System.out.println(object);
}
我收到以下错误:
Exception in thread "main" java.lang.reflect.InaccessibleObjectException: Unable to make public (package name).MobilePhone() accessible: module (project name) does not "exports (package name)" to module gson at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:349) at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:289) at java.base/java.lang.reflect.Constructor.checkCanSetAccessible(Constructor.java:189) at java.base/java.lang.reflect.Constructor.setAccessible(Constructor.java:182) at gson@2.8.2/com.google.gson.internal.ConstructorConstructor.newDefaultConstructor(ConstructorConstructor.java:101) at gson@2.8.2/com.google.gson.internal.ConstructorConstructor.get(ConstructorConstructor.java:83) at gson@2.8.2/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:99) at gson@2.8.2/com.google.gson.Gson.getAdapter(Gson.java:423) at gson@2.8.2/com.google.gson.Gson.toJson(Gson.java:661) at gson@2.8.2/com.google.gson.Gson.toJson(Gson.java:648) at gson@2.8.2/com.google.gson.Gson.toJson(Gson.java:603) at gson@2.8.2/com.google.gson.Gson.toJson(Gson.java:583) at IAssessment/application.AddData.main(AddData.java:23) - this is line String object = json.toJson(mp);
请帮忙
如错误所示,包含 MobilePhone
class 的模块不会导出包含 MobilePhone
的包,因此它在其自身模块之外是不可见的。 (或者如果是导出的话,也只是导出到gson以外的一些模块。)一般来说这意味着你必须在模块描述符文件中添加一个exports
指令,像这样:
exports <pkg-name> to gson;
但是由于 gson 广泛使用反射,您可能需要更进一步,为 gson 提供包的私有和反射访问。为此,将 opens
指令添加到模块描述符文件中:
opens <pkg-name> to gson;