尝试使用 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;