如何使用jackson将json文档的额外属性反序列化为地图或其他字段?

时间:2018-06-07 20:56:29

标签: java json kotlin jackson

我在Kotlin中有一个这样定义的类/接口对:

@JsonDeserialize(`as` = SimpleEvent::class)
interface Event {
    val organizationId: UUID
    val userId: UUID
    val eventTime: LocalDateTime
    val eventId: UUID
    @get:JsonAnyGetter
    @get:JsonAnySetter
    val details: Map<String, JsonNode>
}

data class SimpleEvent(
    override val organizationId: UUID,
    override val userId: UUID,
    override val eventTime: LocalDateTime,
    override val eventId: UUID,
    override val details: Map<String, JsonNode>
) : Event

我的目标是将json文档中的任何额外字段作为details地图中的条目。 @JsonAnyGetter@JsonAnySetter注释很有希望,但我找不到使@JsonAnySetter使用不可变构造函数参数的方法。 @JsonAnyGetter按预期工作,但@JsonAndSetter似乎被忽略。

2 个答案:

答案 0 :(得分:0)

在可变属性上使用@JsonAnySetter。构造函数参数尚不支持,尽管有一个请求添加:

https://github.com/FasterXML/jackson-databind/issues/562

答案 1 :(得分:0)

作为解决方法,这可行:

@JsonAnySetter
@get:JsonAnyGetter
        val others:Map<String,JsonNode> = LinkedHashMap()  /* workaround!*/