【发布时间】:2021-03-02 10:04:02
【问题描述】:
我有一个“不好看”的 XML。 (是的,它是有效的,但与我通常得到的以及我知道如何处理的不同)
通常我希望看到类似的内容:
<Parent....>
<Books>
<Book ...>
<Book ...>
<Book ...>
</Books>
</Parent>
abvoe XML 的数据类如下所示:
data class Parent(
@JacksonXmlProperty(localName = "Books")
@JacksonXmlElementWrapper
var books: List<Book>
)
data class Book(
.....
)
但不幸的是,我们传入的 XML 看起来像这样:
<Parent....>
<Book ...>
<Something>
<Book ....>
<Something>
<Book ...>
</parent>
所以我正在努力将它与普通的 Jackson Mapper 匹配,而不使用自定义映射器。 (如果我需要一个定制的,它应该是什么样子?)
我的映射器如下所示:
val kotlinModule: KotlinModule = KotlinModule.Builder()
.strictNullChecks(false)
.nullIsSameAsDefault(true) // needed, else it will break for null https://github.com/FasterXML/jackson-module-kotlin/issues/130#issuecomment-546625625
.build()
val xmlMapper =
XmlMapper(JacksonXmlModule())
.registerModule(kotlinModule)
.registerModule(JavaTimeModule())
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) // to parse the dates as LocalDate, else parsing error
.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES)
.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT)
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
【问题讨论】:
-
“东西”到底是从哪里来的?
-
@daniu 就是这样。 xml 正在传递每个 xml 验证器,因此它是有效的并且没有格式错误。当然,在我们的项目中,它没有被称为某物,这完全有道理,但我不知道如何将其与 Jackson 匹配/或如何与自定义匹配...
标签: java xml kotlin jackson jackson-dataformat-xml