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?Si vous utilisez Unirest comme bibliothèque http, en utilisant l'option GsonObjectMapper
au lieu de la JacksonObjectMapper
fonctionnera également.
<!-- https://mvnrepository.com/artifact/com.konghq/unirest-object-mappers-gson -->
<dependency>
<groupId>com.konghq</groupId>
<artifactId>unirest-object-mappers-gson</artifactId>
<version>2.3.17</version>
</dependency>
Unirest.config().objectMapper = GsonObjectMapper()
Si vous utilisez Lombok builder, vous obtiendrez l'erreur ci-dessus.
@JsonDeserialize(builder = StationResponse.StationResponseBuilder.class)
public class StationResponse{
//define required properties
}
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonPOJOBuilder(withPrefix = "")
public static class StationResponseBuilder {}
Référence : https://projectlombok.org/features/Builder Avec Jackson
J'ai pu résoudre ce problème en Kotlin avec l'aide de @JacksonProperty
annotation. L'exemple d'utilisation pour le cas ci-dessus serait :
import com.fasterxml.jackson.annotation.JsonProperty
...
data class Station(
@JacksonProperty("repsol_id") val repsol_id: String,
@JacksonProperty("name") val name: String,
...
La cause de mon problème me semble très peu commune, je ne suis pas sûr que quelqu'un d'autre obtienne l'erreur dans les mêmes conditions, j'ai trouvé la cause en différenciant les commits précédents, voilà :
Dans mon build.gradle, j'utilisais ces deux options de compilation, et le fait de commenter cette ligne a réglé le problème.
//compileJava.options.compilerArgs = ['-Xlint:unchecked','-Xlint:deprecation']
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.