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


当前回答

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

其他回答

如果您正在使用LOMBOK。 创建文件lombok。如果没有,请配置并添加这一行。

lombok.anyconstructor.addconstructorproperties=true

我用龙目岛。我得到的错误,因为我没有把@NoArgsConstructor在我的模型类。

Bek的答案是正确的。

但如果有人试图在restcontroller中使用不可变类,即他们正在使用lombok的@value,那么你需要添加lombok. anyconstructor . addconstructorproperties =true

您可以创建一个名为lombok的文件。在根文件pom.xml所在的相同位置进行配置,并将这一行添加到文件中

https://stackoverflow.com/a/56022839/6700081

在下面的用例中遇到相同的错误。

我尝试使用sprint引导(2.0.0快照版本)在各自的bean中没有默认构造函数的情况下达到Rest(Put映射)端点。

但是在最新的Spring Boot版本(2.4.1版本)中,同一段代码可以正常运行。

因此在最新版本的Spring Boot中不再需要bean默认构造函数

我知道这是一个老帖子,但对于任何使用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有一个更一般的方法回答。