J'ai une classe Java MyPojo
que je souhaite désérialiser à partir de JSON. J'ai configuré une classe MixIn spéciale, MyPojoDeMixIn
pour m'aider dans la désérialisation. MyPojo
n'a que int
y String
des variables d'instance combinées avec des getters et setters appropriés. MyPojoDeMixIn
ressemble à 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 parce qu'il y a une erreur de type JsonMappingException
liée à 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 sais que je pourrais résoudre ce problème en créant un objet "Réponse" qui ne possède qu'un objet "Réponse". ArrayList<MyPojo>
mais je devrais alors créer ces objets quelque peu inutiles pour chaque type que je veux renvoyer.
J'ai également consulté en ligne JacksonEnCinqMinutes mais j'ai eu beaucoup de mal à comprendre ce qui concerne les Map<A,B>
et comment elle est liée à ma question. Si vous ne pouvez pas le deviner, je suis tout à fait novice en Java et je viens d'un milieu Obj-C. Ils mentionnent spécifiquement :
Outre la liaison avec les POJO et les types "simples", il existe une variante supplémentaire : la liaison à des conteneurs génériques (typés). Ce cas nécessite un traitement particulier en raison de l'utilisation de s (utilisé par Java pour implémenter les génériques d'une manière quelque peu rétrocompatible), qui vous empêche d'utiliser les types génériques. ), qui vous empêche d'utiliser quelque chose comme Collection.class (qui ne se compile pas).
Ainsi, si vous souhaitez lier des données à 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
?