[英]Deserialize message from JSON to POJO using Jackson
如果您不知道在不检查消息的情况下确切使用哪种类型的POJO,您将如何使用Jackson将JSON文档反序列化为POJO。 有没有办法向杰克逊注册一组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中的字段以解析类型。
Jackson中的BeanDeserializer已被弃用。 但是,我遇到了同样的问题,我使用谷歌的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 is {"value1":1,"value2":"abc"}
请注意,您无法使用循环引用序列化对象,因为这将导致无限递归。
反序列化
BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);
如果您的JSON库具有灵活性,请查看Jackson 。 它有一个BeanDeserializer ,可用于此目的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.