Я пытаюсь использовать JSON подтипов, чтобы создать своего рода "generi c" получателей объекта для различных событий.
На данный момент у меня есть что-то вроде этого:
@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
Я понятия не имею, что происходит или как это вообще возможно, есть идеи, что я могу делать неправильно?