comment créer un personnalisé JsonDeserializer en Java?

J'ai un Map<A,B> fieldOfC comme un champ d'une classe C. Quand j'essaie de désérialiser C avec Jackson, une Exception est levée, car il ne peut pas trouver un Deserializer pour la Carte de clé de A. Alors, je pense que la solution est d'étendre StdJsonDeserializer et le faire manuellement.
Mon problème est que je ne peux pas trouver un exemple sur la façon d'utiliser l'analyseur et le contexte de la méthode "désérialiser" que j'ai à mettre en œuvre.

Quelqu'un peut-il écrire le code pour cet exemple simple, donc je peux l'utiliser pour commencer à construire mon vrai deserializer?

public class A{
  private String a1;
  private Integer a2;
}

public class B{
  private String b1;
}

public class C{
  @JsonDeserialize(keyUsing=ADeserializer.class)
  //also tried this: @JsonDeserialize(keyAs=A.class) without success
  private Map<A,B> fieldOfC;
  private String c1;
}

public class ADeserializer extends StdKeyDeserializer {

  protected ADeserializer(Class<A> cls) {
    super(cls);
  }

  protected Object _parse(String key, DeserializationContext ctxt) throws Exception {
    ObjectMapper mapper = new ObjectMapper();
    return mapper.readValue(key, A.class);
  }
}

Merci d'avance

MODIFIER: recherches sur google, j'ai trouvé un test de le même problème que j'ai. C'est exactement mon problème

MODIFIER: modification de la classe étendue de StdDeserializer à StdKeyDeserializer comme je l'ai lu ici dans la méthode findKeyDeserializer(org.codehaus.jackson.map.DeserializationConfig, org.codehaus.jackson.type.JavaType, org.codehaus.jackson.map.BeanProperty)

MODIFIER: Après la résolution de ce problème je l'ai eu cette une qui est lié.

Je sais que ce n'est pas une solution tout à fait encore, mais Jackson 1.8 possède un support complet pour la touche personnalisée sérialiseurs et deserializers, à la fois via des annotations et par le biais de l'API des modules. Donc, il devrait aider beaucoup: cela a été douloureux pour le faire correctement avec les versions antérieures.

OriginalL'auteur Neuquino | 2011-04-10