杰克逊反序列化基于类型转换为具体类

4

我认为我有一个简单的用例。

我想要将一个包含类型元数据的POJO序列化(最好是一个我自己想出的简单名称,而不是完全限定的类/包名),然后稍后使用这些元数据让Jackson将JSON反序列化回它来自的具体类。被序列化和反序列化的类之间没有继承层级关系。

我的情况是我有一个接受多种文件类型的服务。对于上传的每个文件,客户端都可以检索到其结构和类型取决于它来自哪个文件的JSON数据。因此,当我从服务中检索JSON时,不知道应该反序列化成哪个具体类。我希望Jackson能够根据它提供的元数据来解决这个问题。

例如,我希望能够做到这一点:

String json = ... // get JSON from the service
Object obj = mapper.readValue(json, Object.class) // concrete class is not known
System.out.println(obj.getClass()) // I want this to be MyConcreteClass.class
  • 返回的JSON类型之间没有继承层次结构。
  • 我不想透露包名称或其他内部服务细节/结构。
  • 我可以控制Jackson的序列化过程

相关问题:当JSON包含类型属性时,Jackson是否可以确定要反序列化到的根对象类型?

非常感谢您的帮助!

1个回答

1
这可以使用Jackson的JavaType实现:
String className = "class.name.from.json.service";
JavaType dtoType = TypeFactory.defaultInstance().constructFromCanonical(className);
Object dto = new ObjectMapper().readValue(InputStream, dtoType);
assert dto.getClass().equals(dtoType.getRawClass());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接