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


当前回答

我有一个类似的问题(使用Jackson, lombok, gradle)和一个没有args构造函数的POJO -解决方案是添加

lombok.anyConstructor.addConstructorProperties=true

去龙目岛。配置文件

其他回答

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

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

我加上我的答案,因为我自己,由于我的疏忽,遇到了这个错误。

导入静态对象时不小心引入了错误的序列化器,很长时间都不明白是什么原因。也许这能帮到别人。

// Wrong serializer via static object import
import static org.keycloak.util.JsonSerialization.mapper;

小心些而已。

在类中添加构造函数 或 如果您正在使用pojo添加 @NoArgsConstructor @AllArgsConstructor

还要包括JsonProperty - @JsonProperty("name") private List<员工>姓名;

原因:发生此错误是因为jackson库不知道如何创建没有空构造函数的模型,并且模型包含带有参数的构造函数,该构造函数没有使用@JsonProperty("field_name")注释其参数。默认情况下,如果你没有给你的类添加构造函数,java编译器会创建空构造函数。

解决方案: 向模型中添加一个空构造函数或使用@JsonProperty("field_name")注释构造函数参数

如果你使用Kotlin数据类,那么也可以用@JsonProperty("field_name")进行注释,或者将jackson模块Kotlin注册到ObjectMapper。

您可以使用http://www.jsonschema2pojo.org/创建您的模型。