キーワード†
- 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
}
備考†
- コレクションでないプロパティはこのようにする必要はない