J'ai une classe Java MyPojo
que je souhaite désérialiser de JSON. J'ai configuré une classe MixIn spéciale MyPojoDeMixIn
, pour m'aider dans la désérialisation. MyPojo
a seulement int
et des String
variables d'instance combinées avec des getters et des setters appropriés. MyPojoDeMixIn
ressemble à quelque chose comme ceci:
public abstract class MyPojoDeMixIn {
MyPojoDeMixIn(
@JsonProperty("JsonName1") int prop1,
@JsonProperty("JsonName2") int prop2,
@JsonProperty("JsonName3") String prop3) {}
}
Dans mon client de test, je fais ce qui suit, mais bien sûr cela ne fonctionne pas au moment de la compilation car il y a un JsonMappingException
lié à une incompatibilité de type.
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) }
Je suis conscient que je pourrais atténuer ce problème en créant un objet "Response" qui ne contient qu'un seul objet ArrayList<MyPojo>
, mais je devrais alors créer ces objets quelque peu inutiles pour chaque type que je veux retourner.
J'ai également regardé en ligne JacksonInFiveMinutes, mais j'ai eu beaucoup de mal à comprendre le sujet Map<A,B>
et son lien avec mon problème. Si vous ne pouvez pas le dire, je suis entièrement nouveau sur Java et je viens d'un arrière-plan Obj-C. Ils mentionnent spécifiquement:
En plus de la liaison aux POJO et aux types "simples", il existe une variante supplémentaire: celle de la liaison à des conteneurs génériques (typés). Ce cas nécessite un traitement spécial en raison de ce qu'on appelle l'effacement de type (utilisé par Java pour implémenter des génériques d'une manière quelque peu rétrocompatible), qui vous empêche d'utiliser quelque chose comme Collection.class (qui ne compile pas).
Donc, si vous souhaitez lier des données dans une carte, vous devrez utiliser:
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
Comment puis-je désérialiser directement vers ArrayList
?