Десериализация JSON в ArrayList с помощью Jackson

У меня есть Java-класс MyPojo, который я хочу десериализовать из JSON. Я настроил специальный класс MixIn, MyPojoDeMixIn, чтобы помочь мне с десериализацией. MyPojoимеет только переменные экземпляра intи Stringв сочетании с соответствующими геттерами и сеттерами. MyPojoDeMixInвыглядит примерно так:

public abstract class MyPojoDeMixIn {
  MyPojoDeMixIn(
      @JsonProperty("JsonName1") int prop1,
      @JsonProperty("JsonName2") int prop2,
      @JsonProperty("JsonName3") String prop3) {}
}

В моем тестовом клиенте я делаю следующее, но, конечно, это не работает во время компиляции, потому что существует JsonMappingException, связанное с несоответствием типов .

ObjectMapper m = new ObjectMapper();
m.getDeserializationConfig().addMixInAnnotations(MyPojo.class,MyPojoDeMixIn.class);
try { ArrayList arrayOfPojo = m.readValue(response, MyPojo.class); }
catch (Exception e) { System.out.println(e) }

Я знаю, что мог бы решить эту проблему, создав объект «Ответ», содержащий только ArrayList, но тогда мне пришлось бы создавать эти несколько бесполезные объекты для каждого отдельного объекта. типа хочу вернуть.

Я также просматривал в Интернете JacksonInFiveMinutes, но с трудом понял, что происходит с Mapи как это связано с моей проблемой. Если вы не можете сказать, я совершенно новичок в Java и имею опыт работы с Obj-C. В них особо упоминается:

В дополнение к привязке к POJO и «простым» типам существует еще один дополнительный вариант: привязка к универсальным (типизированным) контейнерам.Этот случай требует особого обращения из-за так называемого Type Erasure. (используется Java для реализации дженериков в несколько обратно совместимых путь), который не позволяет вам использовать что-то вроде Collection.class (который не компилируется).

Итак, если вы хотите связать данные с картой, вам нужно будет использовать:

Map result = mapper.readValue(src, new TypeReference>() { });

Как я могу десериализовать напрямую ArrayList?

81
задан tacos_tacos_tacos 22 March 2012 в 20:03
поделиться