Jackson XML 无法反序列化列表
Jackson XML Unable to deserialize list
我尝试这样解析 XML:
fun main() {
val kotlinXmlMapper = XmlMapper(JacksonXmlModule().apply {
setDefaultUseWrapper(false)
}).registerKotlinModule()
.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true)
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
val value: Feed = kotlinXmlMapper.readValue("""
<feed xmlns="http://www.w3.org/2005/Atom">
<entry>
<id>Test-1</id>
<title>Test</title>
<summary type="html">Test</summary>
</entry>
<entry>
<id>Test-2</id>
<title>Test2</title>
<summary type="html">Test2</summary>
</entry>
</feed>
""".trimIndent(), Feed::class.java)
println(value)}
我的数据 类 如下所示:
@JacksonXmlRootElement(localName="feed")
data class Feed(
@JacksonXmlElementWrapper(localName="entry")
@JsonProperty("entry")
val entry: List<Entry>)
@JacksonXmlRootElement(localName="entry")
data class Entry(val id: String, val title: String, val summary: String)
我想我用 JacksonXmlElementWrapper
注释列表元素,然后它应该可以工作。但不幸的是:
Exception in thread "main" com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `service.Entry` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('Test-1')
at [Source: (StringReader); line: 3, column: 15] (through reference chain: service.Feed["entry"]->java.util.ArrayList[0])
有人 idea/suggestions 吗?
提前致谢。
在 XML
中,默认情况下列表项由一个额外的节点包裹。这个节点在POJO
模型中不代表额外的class,所以,我们可以跳过它。您只需要在 POJO
模型中表示 item
节点,并向 Jackson
指定您要将有效负载读取为这些节点的列表:
val genres = kotlinXmlMapper.readValue<List<Entry>>(json)
另请参阅:
我尝试这样解析 XML:
fun main() {
val kotlinXmlMapper = XmlMapper(JacksonXmlModule().apply {
setDefaultUseWrapper(false)
}).registerKotlinModule()
.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true)
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
val value: Feed = kotlinXmlMapper.readValue("""
<feed xmlns="http://www.w3.org/2005/Atom">
<entry>
<id>Test-1</id>
<title>Test</title>
<summary type="html">Test</summary>
</entry>
<entry>
<id>Test-2</id>
<title>Test2</title>
<summary type="html">Test2</summary>
</entry>
</feed>
""".trimIndent(), Feed::class.java)
println(value)}
我的数据 类 如下所示:
@JacksonXmlRootElement(localName="feed")
data class Feed(
@JacksonXmlElementWrapper(localName="entry")
@JsonProperty("entry")
val entry: List<Entry>)
@JacksonXmlRootElement(localName="entry")
data class Entry(val id: String, val title: String, val summary: String)
我想我用 JacksonXmlElementWrapper
注释列表元素,然后它应该可以工作。但不幸的是:
Exception in thread "main" com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `service.Entry` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('Test-1')
at [Source: (StringReader); line: 3, column: 15] (through reference chain: service.Feed["entry"]->java.util.ArrayList[0])
有人 idea/suggestions 吗?
提前致谢。
在 XML
中,默认情况下列表项由一个额外的节点包裹。这个节点在POJO
模型中不代表额外的class,所以,我们可以跳过它。您只需要在 POJO
模型中表示 item
节点,并向 Jackson
指定您要将有效负载读取为这些节点的列表:
val genres = kotlinXmlMapper.readValue<List<Entry>>(json)
另请参阅: