Deserializador de logging para una list envuelta de tipo

Tengo JSON que es así:

{ "apps": [ { "id": "1", ... }, { "id": "2", ... } ] } 

Y por ejemplo decir que la class de Application ve así

 data class Application( val id: String ) 

Quiero deserializar el JSON en una List<Application> , donde cada {...} es una Application . Esperaba hacer esto sin tener que crear una class contenedora como Applications , @JsonRootName con @JsonRootName , y luego habilitando DeserializationFeature.UNWRAP_ROOT_VALUE . El objective final es tener una interfaz de Retrofit que tenga algo así como:

 @GET("api/apps") fun listApplications(): Call<List<Application>> 

Traté de implementar un JsonDeserializer simple (probablemente podría ser optimizado):

 class ApplicationListDeserializer : JsonDeserializer<List<Application>>() { companion object { private val COLLECTION_TYPE: CollectionType = TypeFactory.defaultInstance() .constructCollectionType(List::class.java, Application::class.java) } override fun deserialize(parser: JsonParser, context: DeserializationContext): List<Application> { val mapper = ObjectMapper() val node: JsonNode = parser.codec.readTree(parser) val collectionReader = mapper.readerFor(COLLECTION_TYPE) return collectionReader.readValue(node.get("apps")) } } 

No veo ninguna forma de registrar este deserializador para este tipo específico. Intenté esto:

 import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.module.SimpleModule import com.fasterxml.jackson.module.kotlin.KotlinModule import com.fasterxml.jackson.module.kotlin.readValue val objectMapper = ObjectMapper().registerModule(KotlinModule()) val module = SimpleModule() module.addDeserializer(List::class.java, ApplicationListDeserializer()) objectMapper.registerModule(module) val applications: List<Application> = objectMapper.readValue("""{ "apps": [ { "id": "/api-catalog-backend" } ] }""") 

Pero eso falla con:

 Can not construct instance of Application: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?)
 at [Source: N/A; line: -1, column: -1] (through reference chain: java.util.ArrayList[0])" type="com.fasterxml.jackson.databind.JsonMappingException"><![CDATA[com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of Application: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?) at [Source: N/A; line: -1, column: -1] (through reference chain: java.util.ArrayList[0]) at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270) at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:1456) at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1012) 

Estoy usando las siguientes versiones de dependencia:

 compile("com.fasterxml.jackson.core", "jackson-core", "2.8.6") compile("com.fasterxml.jackson.module", "jackson-module-kotlin", "2.8.4") compile(kotlinModule("stdlib", "1.1-M03")) compile(kotlinModule("reflect", "1.1-M03")) 

¿Cómo configuro la deserialization para que funcione correctamente con una List<Application> ?