不存在创建者:无法反序列化

Akc*_*ore 6 spring-boot

我收到一个错误...(no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)这表明我需要一个基于财产的创建者。我有一些具有不同参数的构造函数,但没有默认值。

我的解决方案是添加一个默认构造函数SomeClass() {}。我的问题是:为什么会发生这种情况?另外,什么是基于委托/属性的构造函数?

Lon*_*yen 10

如果没有使用 注释的构造函数@JsonCreator,默认情况下,Jackson 需要一个默认的无参数构造函数才能将 JSON 解析为 POJO 或 bean 类。这就是为什么当您添加默认构造函数时,它会正常工作。

如果您实际上不需要使用默认构造函数,只需为 Jackson 添加它即可,您可以将其设置为private,protectedpackage-protected。杰克逊仍然能够通过反思来填补所有领域。

关于no delegate- or property-based Creator,它们是用 注释的构造函数@JsonCreator。在 Jackson 中,有 2 种类型的 Creator/JsonCreator:delegate-based Creatorproperty-based Creator

基于委托的创建者只接受一个参数,该参数没有用 @JsonProperty 注释。Jackson 使用该属性的类型来绑定整个 JSON 值(JSON 对象、数组或标量值),并将其作为该参数的值传递。

基于财产的创造者采取一个或多个论点;所有这些都必须使用 @JsonProperty 进行注释,以指定用于属性的 JSON 名称。它们只能用于绑定来自 JSON 对象的数据;每个参数代表 JSON 对象的一个​​属性;用于绑定在调用创建者时作为该参数传递的数据的属性类型。

您可以在下面的文章中了解有关这两位创作者的更多详细信息。 http://www.cowtowncoder.com/blog/archives/2011/07/entry_457.html