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


当前回答

如果使用lombok,则可以使用@Jacksonized注释。

您不需要设置器——这个注释使用@Value可以很好地工作。

你不需要@NoArgsConstructor -你可以使用@Builder或@RequiredArgsConstructor。

其他回答

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

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

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

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

如果您在POJO模型上使用Lombok,请确保您有这些注释:

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor

它可以有所不同,但要确保@Getter,特别是@NoArgsConstructor。

我得到了同样的错误,问题是我的模型没有实现Serializable,所以检查这个以及,可能会有所帮助,因为这也是原因之一。

使用Lombok时要小心,尤其是@Builder。

解决这个问题的方法是:

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

          }
}

我希望它能让你的生活更轻松

我的问题原因对我来说似乎很不寻常,不确定是否有人在相同的条件下得到错误,我通过不同之前的提交找到了原因,在这里:

通过我的构建。gradle我正在使用这2个编译器选项,并注释掉这一行固定的问题

//compileJava.options.compilerArgs = ['-Xlint:unchecked','-Xlint:deprecation']