4

私は現在 Jackson と協力して、オンラインの場所から XML ファイルを読み取り、それをオブジェクトにマップし、オブジェクト マッパーを使用してそのオブジェクトを 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 へのキャストまたはマッピングを試みました。しかし、それはうまくいきません。欠けているステップは何ですか?私が読んだすべてのドキュメントとチュートリアルは、単一のエントリの単純なインスタンスのみを処理しているようです。

4

1 に答える 1

7

一般的な List を使用していますが、 Map はデータのデフォルト表現だと思います。

マッパーにデータをどのように表現するかを伝えたい場合は、次のようなものを使用します。

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

現時点でこれがコンパイルされるかどうかは確認できませんが、役に立てば幸いです。

TypeReference の詳細については、こちらを参照してください。

于 2014-02-20T15:59:42.360 に答える