У меня есть 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
?