gpt4 book ai didi

xml - 用Jackson和Kotlin反序列化xml namespace

转载 作者:行者123 更新时间:2023-12-02 13:36:17 26 4
gpt4 key购买 nike

我有一个带有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
)

关于xml - 用Jackson和Kotlin反序列化xml namespace ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56318980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com