Объединение всех стандартных и пользовательских десериализаторов Джексона в универсальный десериализатор свойств

Я использую Jackson 2.8 и желаю обернуть все стандартные / пользовательские десериализаторы в стандартную десерциализацию упаковки, чтобы выполнить некоторую пост-обработку на каждом десериализованном экземпляре значения каждого свойства. Для этого я подклассифицировал BeanDeserializerModifier , чтобы передать базовый JsonDeserializer и соответствующий JavaType для данного типа свойства в подкласс StdJsonDeserializer который затем вызывает этот базовый десериализатор и выполняет различные операции с результирующим экземпляром значения.

Во время десериализации я получаю следующую ошибку:

 com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.lindisfarne.MundaneDataClass: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?) 

Без BeanDeserializerModifier операция, конечно же, будет работать очень хорошо – я ясно получаю неправильный или неполный десериализатор. Как я могу получить правильный десериализатор для данного типа?

Полный код Котлина для воспроизведения проблемы ниже:

 package com.lindisfarne import com.fasterxml.jackson.core.JsonParser import com.fasterxml.jackson.databind.* import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier import com.fasterxml.jackson.databind.deser.std.StdDeserializer import com.fasterxml.jackson.module.kotlin.KotlinModule import com.fasterxml.jackson.module.kotlin.readValue class ReferencingBeanModifier() : BeanDeserializerModifier() { override fun modifyDeserializer(config: DeserializationConfig?, beanDesc: BeanDescription?, deserializer: JsonDeserializer<*>?): JsonDeserializer<*> { val javaType = beanDesc?.type return WrappingDeserializer(deserializer = deserializer, javaType = javaType) } } class WrappingDeserializer(val deserializer :JsonDeserializer<*>?, val javaType: JavaType?) : StdDeserializer<Any>(javaType) { override fun deserialize(jsonParser: JsonParser?, deserializationContext: DeserializationContext?): Any? { val instance = deserializer?.deserialize(jsonParser,deserializationContext) println(instance) //do more stuff return instance } } data class MundaneDataClass( val trivialBoolean: Boolean = true, val borningInt:Int = 1, val meaninglessString:String = "yes" ) fun massiveFailure() : Unit { val mapper = ObjectMapper() with (mapper) { registerModules( KotlinModule().setDeserializerModifier(ReferencingBeanModifier()) ) disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) } val mdc = MundaneDataClass() val dataJson = mapper.writeValueAsString(mdc) val mdc2 = mapper.readValue<MundaneDataClass>(dataJson) }