我正在尝试使用Retrofit和Jackson来反序列化一个API。我得到的onFailure错误没有创造者,像默认构造,存在):不能从对象值反序列化(没有委托或基于属性的创造者。


当前回答

我得到了同样的错误,在我添加了一个没有参数的构造函数后,问题就解决了。

其他回答

通过添加@NoArgsConstructor,它将修复这个问题。 因为如果我们没有提供任何构造函数,编译器将添加默认构造函数,但如果我们添加了任何参数化构造函数,并且错过添加NoArgsConstructor,我们将得到这个异常。我们应该强制添加默认构造函数。

我知道这是一个老帖子,但对于任何使用Retrofit的人来说,这可能是非常有用的。

如果你正在使用Retrofit + Jackson + Kotlin + Data类,你需要:

添加实现组:com.fasterxml.jackson。,名称:' Jackson -module-kotlin',版本:'2.7.1-2'到你的依赖,这样Jackson可以反序列化到数据类 当构建翻新时,传递Kotlin Jackson Mapper,以便翻新使用正确的映射器,例如:

    val jsonMapper = com.fasterxml.jackson.module.kotlin.jacksonObjectMapper()

    val retrofit = Retrofit.Builder()
          ...
          .addConverterFactory(JacksonConverterFactory.create(jsonMapper))
          .build()

注意:如果没有使用Retrofit, @Jayson Minard有一个更一般的方法回答。

我用Quarkus, Jackson和Lombok。所以我通过在模型类上添加@Jacksonized属性解决了这个问题。 所以所有的属性是:

@Jacksonized //missing
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ...

我有这个问题,我修复了下面的代码。

@Configuration
open class JacksonMapper {

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

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

如果你使用Unirest作为http库,使用GsonObjectMapper而不是JacksonObjectMapper也可以工作。

<!-- 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()