Tenho uma classe Java MyPojo
que estou interessado em desserializar do JSON. Eu configurei uma classe MixIn especial,, MyPojoDeMixIn
para me ajudar com a desserialização. MyPojo
tem apenas int
e String
variáveis de instância combinadas com getters e setters adequados. MyPojoDeMixIn
parece algo assim:
public abstract class MyPojoDeMixIn {
MyPojoDeMixIn(
@JsonProperty("JsonName1") int prop1,
@JsonProperty("JsonName2") int prop2,
@JsonProperty("JsonName3") String prop3) {}
}
No meu cliente de teste eu faço o seguinte, mas é claro que não funciona em tempo de compilação porque há JsonMappingException
uma incompatibilidade de tipo relacionada.
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) }
Estou ciente de que poderia aliviar esse problema criando um objeto "Resposta" que contenha apenas um ArrayList<MyPojo>
, mas, então, teria de criar esses objetos um tanto inúteis para cada tipo que desejo retornar.
Eu também olhei online em JacksonInFiveMinutes, mas tive um péssimo momento para entender as coisas Map<A,B>
e como elas se relacionam com o meu problema. Se você não sabe, sou totalmente novo em Java e venho de uma formação Obj-C. Eles mencionam especificamente:
Além da vinculação a POJOs e tipos "simples", há uma variante adicional: a vinculação a contêineres genéricos (tipificados). Este caso requer tratamento especial devido ao chamado Type Erasure (usado por Java para implementar genéricos de uma maneira compatível com versões anteriores), que impede você de usar algo como Collection.class (que não compila).
Portanto, se você quiser vincular dados a um mapa, precisará usar:
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
Como posso desserializar diretamente para ArrayList
?