【问题标题】:Using Jackson XML Mapper to get a list使用 Jackson XML Mapper 获取列表
【发布时间】:2014-02-20 14:47:55
【问题描述】:

我目前正在与 Jackson 合作,从在线位置读取 XML 文件,将其映射到一个对象,然后使用 Object Mapper 将该对象插入 MongoDB。

目前我的数据集看起来像这样:

<sensors>
    <sensor id="000" name="Sensor Name" refreshRate="2000">
        <location latitude="12.3456" longitude="-67.890"/>
    </sensor>
<sensor id="000" name="Sensor Name" refreshRate="2000">
        <location latitude="12.3456" longitude="-67.890"/>
    </sensor>
</sensors>

如果我执行以下操作:

列表条目 = xmlMapper.readValue(conn.getInputStream(), List.class);

我得到一个包含项目的 LinkedHashMap 列表。但是,如果我可以将它映射回我已经创建的传感器类,我会更喜欢。

这个传感器类是我与 Mongo 交互时使用的类,它看起来像这样:

@Document(collection = "Sensor")
@JsonIgnoreProperties(ignoreUnknown = true)
@JacksonXmlRootElement(localName="sensors")
public class Sensor {

    @Id
    private int id;

    String name = "";
    long refreshRate = "";
    Location location;

    ...
}

我尝试过投射或映射到 Sensor;但是,这是行不通的。缺少什么步骤?我阅读的所有文档和教程似乎都只处理单个条目的简单实例。

【问题讨论】:

  • 您尝试过类似的方法吗? List 条目 = xmlMmapper.readValue(conn.getInputStream(), new TypeReference>() {});

标签: java json mongodb mongo-jackson-mapper


【解决方案1】:

当您使用通用列表时,我猜 Map 是您数据的默认表示。

如果你想告诉映射器,你的数据应该如何表示,我会使用这样的东西:

List<Sensor> entries = xmlMmapper.readValue(conn.getInputStream(), new TypeReference<List<Sensor>>() {});

目前我无法验证这是否可以编译,但我希望它有所帮助。

有关 TypeReference 的更多信息,请参阅here

【讨论】:

  • 非常感谢!希望我知道事物的 TypeReference 方面。
  • @PSU_Kardi 很高兴能帮上忙。
猜你喜欢
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
  • 1970-01-01
  • 2013-01-01
  • 2018-07-18
相关资源
最近更新 更多