【问题标题】:Error when trying to convert Java object to JSON string using GSON尝试使用 GSON 将 Java 对象转换为 JSON 字符串时出错
【发布时间】:2021-12-30 11:21:54
【问题描述】:

我有一个对象 MobilePhone,其中包含要转换为 Json 字符串的字段(字符串品牌和名称、int ram 和 rom)。我尝试这样做

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);
}

我收到以下错误:

线程“主”java.lang.reflect.InaccessibleObjectException 中的异常:无法公开(包名)。MobilePhone() 可访问:模块(项目名)没有“导出(包名)”到模块 gson 在 java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:349) 在 java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:289) 在 java.base/java.lang.reflect.Constructor.checkCanSetAccessible(Constructor.java:189) 在 java.base/java.lang.reflect.Constructor.setAccessible(Constructor.java:182) 在 gson@2.8.2/com.google.gson.internal.ConstructorConstructor.newDefaultConstructor(ConstructorConstructor.java:101) 在 gson@2.8.2/com.google.gson.internal.ConstructorConstructor.get(ConstructorConstructor.java:83) 在 gson@2.8.2/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:99) 在 gson@2.8.2/com.google.gson.Gson.getAdapter(Gson.java:423) 在 gson@2.8.2/com.google.gson.Gson.toJson(Gson.java:661) 在 gson@2.8.2/com.google.gson.Gson.toJson(Gson.java:648) 在 gson@2.8.2/com.google.gson.Gson.toJson(Gson.java:603) 在 gson@2.8.2/com.google.gson.Gson.toJson(Gson.java:583) 在 IAssessment/application.AddData.main(AddData.java:23) - 这是行 String object = json.toJson(mp);

请帮忙

【问题讨论】:

    标签: java json gson


    【解决方案1】:

    如错误所示,包含MobilePhone 类的模块不会导出包含MobilePhone 的包,因此在其自身模块之外是不可见的。 (或者如果它被导出,它只被导出到除 gson 之外的某些模块。)通常这意味着您必须在模块描述符文件中添加一个exports 指令,如下所示:

    exports <pkg-name> to gson;
    

    但是由于 gson 广泛使用反射,可能您需要更进一步,并提供包对 gson 的私有和反射访问。为此,请在模块描述符文件中添加 opens 指令:

    opens <pkg-name> to gson;
    

    【讨论】:

    • 如何打开模块描述符文件?我不确定那是什么。对不起,基本和或愚蠢的问题,我是java的新手,我刚刚学习软件开发
    • tutorial 开始或查看Project Jigsaw 页面。
    • 没关系,我想通了。你是?
    • 太棒了。它有效!
    猜你喜欢
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多