Возможно, вы неправильно поняли роль KeySerializer
/ KeyDeserializer
: они используются для ключей Java Map
, а не в качестве общих идентификаторов в смысле базы данных в качестве термина «ключ».
Таким образом, вам, вероятно, придется использовать обычный JsonSerializer
/ JsonDeserializer
.
Что касается типа: предполагается, что обработчики созданы для определенных типов, и никакая дополнительная информация о типе не передается во время процесса сериализации или десериализации: ожидаемый тип (если обработчики используются для различных типов) должен быть передан во время построения.
При регистрации общих сериализаторов или десериализаторов вы можете сделать это при реализации Module
, поскольку одним из аргументов является тип, для которого запрашивается (де) сериализатор.
При определении обработчиков непосредственно для свойств (например, при использовании аннотаций) эта информация доступна при createContextual()
обратном вызове интерфейса ContextualSerializer
(и -Deserializer), если ваш обработчик реализует его: BeanProperty
передается для указания свойства (в этом случае поле с аннотацией), и вы можете получить доступ к его типу. Эта информация должна быть сохранена для использования во время (де) сериализации.
РЕДАКТИРОВАТЬ : как указал автор, я действительно неправильно понял вопрос: KeySerializer - это имя класса, а не аннотация.