Kotlin 尽管至少存在一个创建者,但无法构造类的实例

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

当使用Jackson反序列化
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
,以处理奇怪的映射情况