Vous devez utiliser jackson-module-kotlin
pour désérialiser les classes de données. Voir aquí pour les détails.
Le message d'erreur ci-dessus est ce que Jackson vous donne si vous essayez de désérialiser une valeur dans une classe de données lorsque ce module n'est pas activé ou, même s'il l'est, lorsque le module ObjectMapper
qu'il utilise n'a pas le KotlinModule
enregistré. Par exemple, prenez ce code :
data class TestDataClass (val foo: String)
val jsonString = """{ "foo": "bar" }"""
val deserializedValue = ObjectMapper().readerFor(TestDataClass::class.java).readValue<TestDataClass>(jsonString)
Cette opération échouera avec l'erreur suivante :
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `test.SerializationTests$TestDataClass` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)
Si vous modifiez le code ci-dessus et remplacez ObjectMapper
con jacksonObjectMapper
(qui renvoie simplement un ObjectMapper
con el KotlinModule
enregistré), cela fonctionne. c.-à-d.
val deserializedValue = jacksonObjectMapper().readerFor(TestDataClass::class.java).readValue<TestDataClass>(jsonString)
Je ne suis pas sûr de ce qui se passe du côté d'Android, mais il semble que vous devrez faire en sorte que le système utilise l'option jacksonObjectMapper
pour effectuer la désérialisation.
2 votes
Il semble que vous n'utilisiez pas le module Jackson pour Kotlin, qui fonctionne avec les classes de données qui n'ont pas de constructeur par défaut, ce qui n'est pas le cas de la vôtre. Vérifiez ce module et voyez si vous avez des problèmes par la suite.
0 votes
Veuillez modifier la réponse acceptée.