我有一个带有2个命名空间的xml元素,但无法通过jackson读取它们。
<Person xmlns="http://some.namespace.com" xmlns:ns0="http://some.other.namespace.com">
<name>John</name>
</Person>
internal data class Person(
val name: String,
@get:JacksonXmlProperty(isAttribute = true)
val xmlns: String,
@get:JacksonXmlProperty(isAttribute = true, localName="xmlns:ns0")
val ns0: String
)
当使用jackson读取XML时,我收到一条错误消息,说两个 namespace 都应该可以为空。
我已经尝试过在类的主体中使用attrs等一些变体,并在 namespace 属性中尝试过,例如
@JacksonXmlProperty(isAttribute = true, localName = "ns0", namespace = "xmlns")
var ns0: String? = null
这是我正在使用的映射器
val mapper: XmlMapper = XmlMapper().apply {
registerModule(KotlinModule())
setSerializationInclusion(JsonInclude.Include.NON_NULL)
}
如何再次读写该xml,并使它们相同?
请您参考如下方法:
XML参数xmlns="...."和xmlns:prefix="...."是XML namespace 定义。它们不是XML属性,
即使他们看起来像这样
因此,您不能定义与这些属性相对应的POJO属性。
而是使用 namespace 的@JacksonXmlProperty参数。
因此,您的Person类将如下所示:
internal data class Person(
@get: JacksonXmlProperty(isAttribute=true, localName="name", namespace="http://some.namespace.com")
val name: String
)




