У меня есть класс 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<MyPojo> arrayOfPojo = m.readValue(response, MyPojo.class); }
catch (Exception e) { System.out.println(e) }
Я знаю, что могу облегчить эту проблему, создав объект «Response», в котором есть только один ArrayList<MyPojo>
, но тогда мне придется создавать эти несколько бесполезные объекты для каждого отдельного типа, который я хочу вернуть.
Я также посмотрел онлайн на JacksonInFiveMinutes, но ужасно долго разбирался в Map<A,B>
том, что касается моей проблемы и как это связано с ней. Если вы не можете сказать, я совершенно новичок в Java и имею опыт работы с Obj-C. В них конкретно упоминается:
В дополнение к привязке к POJO и «простым» типам существует еще один вариант: привязка к универсальным (типизированным) контейнерам. Этот случай требует особой обработки из-за так называемого стирания типа (используется Java для реализации универсальных шаблонов в некоторой степени обратно совместимым способом), что не позволяет вам использовать что-то вроде Collection.class (которое не компилируется).
Итак, если вы хотите привязать данные к карте, вам нужно будет использовать:
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
Как я могу выполнить десериализацию напрямую в ArrayList
?