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