No existen creadores, como la construcción predeterminada): no se puede deserializar desde el valor del objeto (no existe un creador basado en delegados o propiedades).
Estoy intentando consumir una API usando Retrofit y Jackson para deserializar. Recibo el error onFailure No Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator
.
Motivo:
este error se produce porque Jackson Library no sabe cómo crear su modelo que no tiene un constructor vacío y el modelo contiene un constructor con parámetros que no anotó sus parámetros con @JsonProperty("field_name")
. De forma predeterminada, el compilador de Java crea un constructor vacío si no agregó un constructor a su clase.
Solución:
agregue un constructor vacío a su modelo o anote los parámetros del constructor con@JsonProperty("field_name")
Si utiliza una clase de datos de Kotlin, también puede anotar @JsonProperty("field_name")
o registrar el módulo Jackson Kotlin en ObjectMapper
.
Puede crear sus modelos usando http://www.jsonschema2pojo.org/ .
Llegué aquí buscando este error:
No Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator
No tiene nada que ver con Retrofit, pero si estás usando Jackson, este error se resolvió agregando un constructor predeterminado a la clase que arroja el error. Más aquí: https://www.baeldung.com/jackson-exception
Bits más relevantes del enlace de arriba:
"Esta excepción se produce si Jackson no puede acceder al constructor. Cuando intentamos deserializar una cadena JSON, JsonMappingException: No Suitable Constructor Found
se genera. Para resolver este problema, simplemente agregamos un constructor predeterminado:
public Foo() {
super();
}
Ahora, cuando deserialicemos, el proceso funcionará bien".
Si está utilizando Lombok en un modelo POJO , asegúrese de tener estas anotaciones:
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
Podría variar, pero asegúrate @Getter
y sobre todo@NoArgsConstructor
.