Módulos Jackson para serialización de mapas

Tengo una clase que contiene un mapa (con clave no String) y algunos otros campos.

public class MyClass() {
    private Map<KeyObject, OtherObject> map;
    private String someField;

    public MyClass(Map<KeyObject, OtherObject> map, String someField) {
        this.map = map;
        this.someField = someField;
    }

    // Getters & Setters
}

Me gustaría serializar y deserializar esta clase usando Jackson. Vi formas diferentes de hacerlo y decidí intentar usarmódulos jackson.

Seguíesta publicación y JsonDeserializer y JsonSerializer extendidos. El problema es que esas clases deberían escribirse, por lo que debería verse como

public class keyDeserializer extends JsonDeserializer<Map<KeyObject, OtherObject>> {
...
}

Lo mismo para el KeySerializer.

Luego agregando al módulo:

module.addSerializer(new keySerializer());
module.addDeserializer(Map.class, new keyDeserializer());

Pero aparentemente esto está mal ya que recibo una excepción:

keySerializer does not define valid handledType() -- must either register with method that takes type argument  or make serializer extend 'org.codehaus.jackson.map.ser.std.SerializerBase'

Podría tener mi serializador y deserializador para escribirMi clase, pero luego tuve que analizarlo manualmente, lo que no es razonable.

ACTUALIZAR:

Logré evitar la creación del módulo en el código usando anotaciones

@JsonDeserialize(using = keyDeserializer.class)
@JsonSerialize(using = keySerializer.class)
private Map<KeyObject, OtherObject> map;

Pero luego tengo que serializar / deserializar toda la estructura del mapa por mi cuenta desde la salida toString (). Entonces probé una anotación diferente:

@JsonDeserialize(keyUsing = MyKeyDeserializer.class)
private Map<KeyObject, OtherObject> map;

Donde se extiende MyKeyDeserializerorg.codehaus.jackson.map.KeyDeserializer y anulando el método

public Object deserializeKey(String key, DeserializationContext ctxt) throws IOException, JsonProcessingException {...}

Luego, deserialice manualmente mi clave, pero nuevamente desde la salida toString () de mi clase de clave.

Esto no es óptimo (esta dependencia del método toString ()). ¿Hay una mejor manera?

Respuestas a la pregunta(1)

Su respuesta a la pregunta