【发布时间】:2020-02-08 13:22:11
【问题描述】:
我正在尝试使用 JSON 子类型为不同的事件创建某种“通用”对象接收者。
目前我有这样的事情:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "color")
@JsonSubTypes(
JsonSubTypes.Type(value = Color::class, name = "RED"),
JsonSubTypes.Type(value = Color::class, name = "YELLOW"),
JsonSubTypes.Type(value = SpecialColor::class, name = "SPECIAL_1"),
JsonSubTypes.Type(value = SpecialColor::class, name = "SPECIAL_2"),
JsonSubTypes.Type(value = CustomColor::class, name = "CUSTOM")
)
interface EventColor{
val eventId: String
val color: ColorType
}
enum class ColorType {
RED, YELLOW
}
然后我有我的对象
data class Color(
@get:JsonProperty override val eventId: String,
@get:JsonProperty override val color: ColorType
): EventColor
当我做一个新的 Color 实例时问题就来了
Color("123", ColorType.RED)
当我打印对象时,我得到了正确的信息
Color(eventId=event123, ColorType.RED)
但是当我这样做时
private val mapper = jacksonObjectMapper()
val mapped = mapper.writeValueAsString(myObject)
打印我的对象我得到了这个
{"color":"RED","eventId":"event123","color":"YELLOW"}
这是我的映射器的导入
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
我不知道发生了什么,也不知道这怎么可能,知道我做错了什么吗?
【问题讨论】: