Kotlin 尽管至少存在一个创建者,但无法构造类的实例
当使用Jackson反序列化Kotlin 尽管至少存在一个创建者,但无法构造类的实例,kotlin,jackson,deserialization,Kotlin,Jackson,Deserialization,当使用Jackson反序列化LocationGeneric时,Kotlin中出现以下问题。在这种情况下,我不向用于构造具体类的抽象类添加额外信息。反序列化LocationOne或LocationTwo时效果很好 这是我写的代码: @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) @JsonSubTypes
LocationGeneric
时,Kotlin中出现以下问题。在这种情况下,我不向用于构造具体类的抽象类添加额外信息。反序列化LocationOne
或LocationTwo
时效果很好
这是我写的代码:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY,
property = "type", visible = true)
@JsonSubTypes(
JsonSubTypes.Type(value = LocationOne::class, name = "ONE"),
JsonSubTypes.Type(value = LocationTwo::class, name = "TWO"),
JsonSubTypes.Type(value = LocationGeneric::class, name = "GENERIC_1"),
JsonSubTypes.Type(value = LocationGeneric::class, name = "GENERIC_2")
)
abstract class Location(
val type: String
)
class LocationGeneric(
type: String
): Location(type)
class LocationOne(
type: String,
val somethingSpecific: String
): Location(type)
class LocationAirport(
type: String,
val somethingElse: String
): Location(type)
这就是我得到的错误:
无法构造位置的实例(尽管至少有一个创建者
存在):无法从对象值反序列化(无委托-或
基于属性的创建者)
我尝试将抽象类更改为开放类,但到目前为止运气不佳。我为其他案件工作。为什么在LocationGeneric
案例中找不到默认的Kotlin构造函数?有什么想法吗?我遇到的问题是,我不知何故失去了构造函数的可见性,因此我为泛型案例提供了一个默认实现,并对我的泛型实现的构造函数和属性进行了注释
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY,
property = "type", visible = true, defaultImpl = LocationGeneric::class)
@JsonSubTypes(
JsonSubTypes.Type(value = LocationOne::class, name = "ONE"),
JsonSubTypes.Type(value = LocationTwo::class, name = "TWO")
)
abstract class Location(
val type: String
)
class LocationGeneric @JsonCreator constructor(
@JsonProperty("type") type: String
): Location(type)
这还允许我添加一个init
来处理奇怪的映射情况。我遇到的问题是,我不知何故失去了构造函数的可见性,因此我为泛型情况提供了一个默认实现,并注释了我的泛型实现的构造函数和属性
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY,
property = "type", visible = true, defaultImpl = LocationGeneric::class)
@JsonSubTypes(
JsonSubTypes.Type(value = LocationOne::class, name = "ONE"),
JsonSubTypes.Type(value = LocationTwo::class, name = "TWO")
)
abstract class Location(
val type: String
)
class LocationGeneric @JsonCreator constructor(
@JsonProperty("type") type: String
): Location(type)
这还允许我添加一个init
,以处理奇怪的映射情况