Mam klasę Java MyPojo
, którą chcę deserializować z formatu JSON. Skonfigurowałem specjalną klasę MixIn MyPojoDeMixIn
, aby pomóc mi w deserializacji. MyPojo
ma zmienne tylko int
i String
instancji połączone z odpowiednimi metodami pobierającymi i ustawiającymi. MyPojoDeMixIn
wygląda mniej więcej tak:
public abstract class MyPojoDeMixIn {
MyPojoDeMixIn(
@JsonProperty("JsonName1") int prop1,
@JsonProperty("JsonName2") int prop2,
@JsonProperty("JsonName3") String prop3) {}
}
W moim kliencie testowym wykonuję następujące czynności, ale oczywiście nie działa to w czasie kompilacji, ponieważ istnieje JsonMappingException
powiązanie z niezgodnością typów.
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) }
Zdaję sobie sprawę, że mógłbym rozwiązać ten problem, tworząc obiekt „Response”, który zawiera tylko element ArrayList<MyPojo>
, ale wtedy musiałbym utworzyć te nieco bezużyteczne obiekty dla każdego typu, który chcę zwrócić.
Spojrzałem również na JacksonInFiveMinutes w Internecie, ale miałem okropny czas, aby zrozumieć, o co chodzi Map<A,B>
i jaki ma to związek z moim problemem. Jeśli nie możesz powiedzieć, jestem całkowicie nowy w Javie i pochodzę z tła Obj-C. W szczególności wspominają o:
Oprócz tworzenia powiązań z obiektami POJO i typami „prostymi” istnieje jeszcze jeden wariant: powiązanie z kontenerami rodzajowymi (typowymi). Ten przypadek wymaga specjalnej obsługi ze względu na tak zwany typ wymazywania (używany przez Javę do implementacji typów generycznych w sposób nieco wstecznie zgodny), który uniemożliwia użycie czegoś takiego jak Collection.class (który nie kompiluje się).
Więc jeśli chcesz powiązać dane z mapą, będziesz musiał użyć:
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
Jak mogę deserializować bezpośrednio do ArrayList
?