332 votes

Il n'existe pas de créateurs, comme la construction par défaut) : on ne peut pas désérialiser à partir de la valeur d'un objet (il n'existe pas de créateur basé sur un délégué ou une propriété).

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 .

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.

3voto

Elias Meireles Points 426

J'ai eu ce problème et je l'ai résolu avec le code ci-dessous.

@Configuration
open class JacksonMapper {

    @Bean
    open fun mapper(): ObjectMapper {
        val mapper = ObjectMapper()
        ...

        mapper.registerModule(KotlinModule())
        return mapper
    }
}

3voto

Nather Webber Points 127

Soyez prudent avec Lombok, surtout avec @Builder.

ce qui a résolu le problème pour moi était :

   @JsonDeserialize(builder = X.XBuilder.class)
       class X{
          @JsonPOJOBuilder(withPrefix = "")
          public static class XBuilder{

          }
}

J'espère que cela vous facilitera la vie

2voto

shruthi Points 1

En ajoutant @NoArgsConstructor cela va régler le problème. Parce que le compilateur ajoutera le constructeur par défaut si nous n'avons pas fourni de constructeur, mais si nous avons ajouté un constructeur paramétré et que nous avons omis d'ajouter le paramètre NoArgsConstructor nous obtiendrons cette exception. Nous devons obligatoirement ajouter le Constructeur par défaut.

1voto

Charles Chen Points 1

Je veux juste souligner que cette réponse fournit une meilleure explication.
En gros, vous pouvez soit avoir @Getter y @NoArgConstructor ensemble
ou laisser Lombok se régénérer @ConstructorProperties en utilisant lombok.config fichier,
ou compilez votre projet java avec -parameters drapeaux,
ou laisser Jackson utiliser le site de Lombok @Builder

1voto

Manjunath Joshi Points 11

Si vous utilisez LOMBOK. Créez un fichier lombok.config si vous n'en avez pas et ajoutez cette ligne.

lombok.anyconstructor.addconstructorproperties=true

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X