Módulos Jackson para serialização de mapas

Eu tenho uma classe que contém um mapa (com chave não String) e alguns outros 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
}

Eu gostaria de serializar e desserializar essa classe usando Jackson. Eu vi uma maneira diferente de fazer isso e decidi tentar usarmódulos jackson.

eu seguiesta postagem e JsonDeserializer e JsonSerializer estendidos. O problema é que essas classes devem ser digitadas, por isso devem parecer

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

O mesmo para o KeySerializer.

Em seguida, adicionando ao módulo:

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

Mas isso está errado, aparentemente, já que estou recebendo uma exceção:

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'

Eu poderia digitar meu serializador e desserializador paraMinha classe, mas tive que analisar manualmente tudo isso, o que não é razoável.

ATUALIZAR:

Consegui ignorar a criação do módulo no código usando anotações

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

Mas então eu tenho que serializar / desserializar toda a estrutura do mapa por conta própria a partir da saída toString (). Então tentei uma anotação diferente:

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

Onde MyKeyDeserializer se estendeorg.codehaus.jackson.map.KeyDeserializer e substituindo o método

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

Em seguida, desserializando manualmente minha chave, mas novamente a partir da saída toString () da minha classe de chave.

Isso não é o ideal (essa dependência do método toString ()). Existe uma maneira melhor?

questionAnswers(1)

yourAnswerToTheQuestion