障害メモ/Jacksonでxml上のコレクションをデシリアライズできない
キーワード
- Jackson
- XML
- Kotlin
- data class
現象
Jacksonで次のようなXML上のコレクションをKotlinのデータクラスにデシリアライズできない。
<example>
<elements>
<element>...</element>
</elements>
</example>
次のエラーメッセージを得る。
could not find creator property with name ...
原因
データクラスを次のようには定義できない。
@JacksonXmlRootElement(localName = "example")
data class Example(
@field: JacksonXmlElementWrapper(localName = "elements")
@field: JacksonXmlProperty(localName = "element")
val elements: List<Element> = emptyList()
)
対策
コンストラクタ引数で該当のプロパティ(コレクション)の分を定義しない。
@JacksonXmlRootElement(localName = "example")
data class Example(
private var elements: List<Element> = emptyList()
) {
@get: JacksonXmlElementWrapper(localName = "elements")
@get: JacksonXmlProperty(localName = "element")
var elements
set(value) { _elements = value }
get() = _elements
}
備考
- コレクションでないプロパティはこのようにする必要はない
参考
作成日 2023-03-08
