将JSON反序列化为dymanically加载的类文件

时间:2017-05-31 12:58:57

标签: java json reflection jackson classloader

我在JSON响应中从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()我需要提供实际的类作为第二个参数,但不知道如何。有人可以帮我解决一下吗?

1 个答案:

答案 0 :(得分:1)

readValue的第二个参数上,您需要传递一个Class实例来定义您想要阅读的对象的类型。看来你传递的是Class本身的类型。杰克逊无法从Class反序列化jsonBytes对象。这样的事情应该有效:

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

即。从parentJsonClass

中读取jsonBytes类型的对象