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