J'essaie de consommer une API en utilisant Retrofit et Jackson pour désérialiser. J'obtiens l'erreur onFailure No Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator
.
Réponses
Trop de publicités?Je sais que c'est un vieux post, mais pour tous ceux qui utilisent Retrofit, cela peut être utile.
Si vous utilisez Retrofit + Jackson + Kotlin + Data classes, vous avez besoin :
- ajouter
implement group: 'com.fasterxml.jackson.module', name: 'jackson-module-kotlin', version: '2.7.1-2'
à vos dépendances, afin que Jackson puisse désérialiser les classes de données. -
Lors de la construction de Retrofit, passez le mappeur Kotlin Jackson, afin que Retrofit utilise le bon mappeur, ex :
val jsonMapper = com.fasterxml.jackson.module.kotlin.jacksonObjectMapper() val retrofit = Retrofit.Builder() ... .addConverterFactory(JacksonConverterFactory.create(jsonMapper)) .build()
Note : Si Retrofit n'est pas utilisé, @Jayson Minard a une réponse d'approche plus générale.
J'utilise rescu avec Kotlin et l'a résolu en utilisant @ConstructorProperties
data class MyResponse @ConstructorProperties("message", "count") constructor(
val message: String,
val count: Int
)
Jackson utilise @ConstructorProperties. Cela devrait également corriger les @Data de Lombok.
Comme le mentionne l'erreur, la classe n'a pas de constructeur par défaut.
Ajout de @NoArgsConstructor à la classe de l'entité devrait régler le problème.
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.