Использование Jackson XML Mapper для получения списка

В настоящее время я работаю с Джексоном, чтобы прочитать XML-файл из онлайн-местоположения, сопоставить его с объектом, а затем вставить этот объект в MongoDB с помощью Object Mapper.

На данный момент мой набор данных выглядит примерно так:

<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;

    ...
}

Я пробовал приведение или сопоставление с датчиком; однако это не работает. Какого шага не хватает? Вся документация и учебные пособия, которые я читал, похоже, обрабатывают только простые экземпляры одной записи.


person ist_lion    schedule 20.02.2014    source источник
comment
Вы пробовали что-то подобное? Записи List‹Sensor› = xmlMmapper.readValue(conn.getInputStream(), new TypeReference‹List‹Sensor››() {});   -  person Jiri Kusa    schedule 20.02.2014


Ответы (1)


Пока вы используете общий список, я думаю, что Map является представлением ваших данных по умолчанию.

Если вы хотите сообщить картографу, как должны быть представлены ваши данные, я бы использовал что-то вроде этого:

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

Я не могу проверить, компилируется ли это в данный момент, но я надеюсь, что это поможет.

Дополнительные сведения о TypeReference см. здесь.

person Jiri Kusa    schedule 20.02.2014
comment
Огромное спасибо! Жаль, что я не знал об аспекте TypeReference вещей. - person ist_lion; 20.02.2014
comment
@PSU_Kardi Я рад, что смог помочь. - person Jiri Kusa; 20.02.2014