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


当前回答

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

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

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

小心些而已。

其他回答

我在Kotlin中也遇到了例外。如果在应用KotlinModule之后仍然有问题,您可能(尽管不太可能)在某个地方有值类。

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

@Configuration
open class JacksonMapper {

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

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

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

解决这个问题的方法是:

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

          }
}

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

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

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor

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

只是想指出这个答案提供了一个更好的解释。 基本上你可以同时使用@Getter和@NoArgConstructor 或者让Lombok使用Lombok再生@ConstructorProperties。配置文件, 或者用-parameters标记编译Java项目, 或者让杰克逊使用龙目岛的@Builder