【问题标题】:deserialize JSON into dymanically loaded class file将 JSON 反序列化为动态加载的类文件
【发布时间】:2017-05-31 12:58:56
【问题描述】:

我已经在 J​​SON 响应中从 Schema 生成 POJO,编译并加载了从 POJO 生成的类,但是在反序列化 JSON 响应时,我没有可以反序列化的实际类。

MyClassLoader classLoader = new MyClassLoader(POJOGeneratorForJSON.class.getClassLoader());

Class parentJsonClass = classLoader.loadClass(topLevelclassName, classpathLoc);

ObjectMapper mapper = new ObjectMapper();

byte[] jsonBytes = generator.getBytesFromURL(source);

if(jsonBytes != null){

    Object jsonObj = parentJsonClass.newInstance();
    jsonObj = mapper.readValue(jsonBytes, Class.class);
}

我得到的例外是:“com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.Class out of START_OBJECT token

我知道在mapper.readValue() 中我需要提供实际类作为第二个参数,但不知道如何。有人可以帮我解决问题吗?

【问题讨论】:

    标签: java json reflection jackson classloader


    【解决方案1】:

    readValue 的第二个参数上,您需要传递一个Class 实例来定义您要读取的对象的类型。看来您正在传递 Class 本身的类型。而杰克逊不能反序列化来自jsonBytesClass 对象。像这样的东西应该可以工作:

    Object jsonObj = mapper.readValue(jsonBytes, parentJsonClass);
    

    即从jsonBytes读取parentJsonClass类型的对象

    【讨论】:

    • 非常感谢 Manos .... 成功了!! .... 我的错。但我的最终需要是调用 ParentJsonClass 中的方法(我们有作为 parentJsonClass 的对象),但它的类型是 Class 而不是 ParentJsonClass。你能帮忙吗?
    • 您可以使用Class parentJsonClassObject jsonObj 强制转换为该类型。所以如果有方法foo()parentJsonClass.cast(jsonObj).foo();
    • 使用上述方法,我只能看到对象级别的方法,而不是 ParentJsonClass 类中的方法。我的问题是我什至不知道那里的类中的方法。
    • stackoverflow.com/a/20366356/1413133 尝试使用反射列出类的公共方法。或者试试parentJsonClass.getMethods()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 2015-03-17
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    相关资源
    最近更新 更多