Модули Джексона для сериализации карт

У меня есть класс, который содержит карту (с не строковым ключом) и некоторые другие поля.

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
}

Я хотел бы сериализовать и десериализовать этот класс, используя Джексона. Я видел разные способы сделать это и решил попробовать использоватьмодули джексона.

Я последовал заэта почта и расширенные JsonDeserializer и JsonSerializer. Проблема в том, что эти классы должны быть типизированы, поэтому они должны выглядеть так:

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

То же самое для KeySerializer.

Затем добавляем в модуль:

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

Но это неправильно, по-видимому, так как я получаю исключение:

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'

Я мог бы иметь свой сериализатор и десериализатор, чтобы напечататьМои занятия, но тогда мне пришлось вручную все это разобрать, что не разумно.

ОБНОВИТЬ:

Мне удалось обойти создание модуля в коде с помощью аннотаций

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

Но затем я должен сериализовать / десериализовать всю структуру карты самостоятельно из вывода toString (). Поэтому попробовал другую аннотацию:

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

Где распространяется MyKeyDeserializerorg.codehaus.jackson.map.KeyDeserializer и переопределение метода

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

Затем вручную десериализовать мой ключ, но снова из вывода toString () моего класса ключей.

Это не оптимально (это зависимость от метода toString ()). Есть ли способ лучше?

Ответы на вопрос(1)

Ваш ответ на вопрос