如果您不知道要使用哪种POJO来反序列化JSON文档,而没有检查消息的方式,您将如何使用Jackson将JSON文档反序列化为POJO?是否有一种方法可以向Jackson注册一组POJO,以便它可以基于消息选择其中一个?
我想解决的场景是通过线路接收JSON消息并根据消息内容反序列化为多个POJO之一。
我不知道你所描述的机制。 我认为您需要自己检查json:
Map<String, Class<?>> myTypes = ...
String json = ...
JsonNode node = mapper.readTree(json);
String type = node.get("type").getTextValue();
Object myobject = mapper.readValue(json, myTypes.get(type));
如果您没有类型字段,您将需要检查JsonNode中的字段以解析类型。
BeanDeserializer在Jackson中已被弃用。 然而,我遇到了同样的问题,并使用Google的GSon解决了它。请看这个例子。
假设您有一个POJO数据类型:
class BagOfPrimitives {
private int value1 = 1;
private String value2 = "abc";
private transient int value3 = 3;
BagOfPrimitives() {
// no-args constructor
}
}
序列化
BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj); // ==> json 是 {"value1":1,"value2":"abc"}
反序列化
BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);
JsonNode
)转换为POJO: "Object myObject = mapper.treeAsValue(node, type);"。这不仅更有效率,而且还允许您修改树(添加或删除节点,更改值)。 - StaxMan