У меня есть класс 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 и "простым" типам, существует один дополнительный вариант: привязка к универсальным (типизированным) контейнерам. Этот случай требует специальной обработки из-за так называемого Type Erasure (используется Java для реализации генериков в несколько обратной совместимости путь), что мешает вам использовать что-то вроде Collection.class(который не компилируется).
Итак, если вы хотите привязать данные к карте, вам нужно будет использовать:
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
Как я могу десериализоваться непосредственно на ArrayList
?