繁体   English   中英

使用Jackson反序列化从JSON到POJO的消息

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM