我认为应该是一个简单的用例。
我想序列化一个带有类型元数据的POJO(最好是我提出的简单名称,而不是完全限定的类/包名),然后杰克逊将JSON反序列化为它来自的具体类。这个元数据。在被序列化和反序列化的类之间没有继承层次结构。
我的方案是我有一个接受多种文件类型的服务。对于上载的每个文件,客户端可以检索JSON数据,其结构和类型取决于它来自的文件。因此,当我从服务中检索JSON时,不知道要反序列化的具体类是什么。我希望杰克逊能够根据它提供的元数据来解决这个问题。
例如,我希望能够这样做:
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
相关问题:Can jackson determine root object type to deserialize to when json includes type property?
非常感谢你的帮助!
答案 0 :(得分:1)
这可以使用杰克逊的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());