自定义KeyDeserializer

我有一个用例,我需要一个自定义的KeyDeserializer 。 下面的工作,但感觉错了(这是Kotlin,但应该是Java民间非常可读):

 class KeepMapKeyDeserializer : KeyDeserializer() { // In reality this is a single executable-wide instance val mapper = ObjectMapper() override fun deserializeKey(key: String, ctxt: DeserializationContext): ColumnId<*> { return mapper.readValue(key, ColumnId::class.java) } } 

直接在deserializeKey方法中使用ObjectMapper感觉很奇怪,但我找不到任何方法来使用传递给该方法的DeserializationContext 。 例如,使用ctxt.parser.readValueAs(ColumnId::class.java)不起作用,也不能做更详细的选项,如:

 val colIdType = ctxt.typeFactory.constructType(ColumnId::class.java) val deserializer = ctxt.findRootValueDeserializer(colIdType) return deserializer.deserialize(ctxt.parser, ctxt) as ColumnId<*> 

这真的是正确的方式去做事吗?

请注意,序列化的ColumnId如下所示: {"name":"c1","clazz":"kotlin.String"}