繁体   English   中英

Jackson XML 注释:具有属性的字符串元素

[英]Jackson XML Annotations: String element with attribute

我似乎无法找到一种使用 jackson-xml 注释生成 Pojo 的方法,该注释会生成如下所示的 xml:

<Root>
    <Element1 ns="xxx">
        <Element2 ns="yyy">A String</Element2>
    </Element1>
</Root>

我似乎最接近的是以下内容:

根POJO

public class Root {
    @JacksonXmlProperty(localName = "Element1")
    private Element1 element1;

    public String getElement1() {
        return element1;
    }

    public void setElement1(String element1) {
        this.element1 = element1;
    }
}

元素 1 POJO

public class Element1 {
    @JacksonXmlProperty(isAttribute = true)
    private String ns = "xxx";
    @JacksonXmlProperty(localName = "Element2")
    private Element2 element2;

    public String getElement2() {
        return element2;
    }

    public void setElement2(String element2) {
        this.element2 = element2;
    }
}

元素 2 POJO

public class Element2 {
    @JacksonXmlProperty(isAttribute = true)
    private String ns = "yyy";
    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}

但这会返回以下内容:

<Root>
    <Element1 ns="xxx">
        <Element2 ns="yyy"><value>A String</value></Element2>
    </Element1>
</Root>

我不想显示“A String”周围的元素标签。

您应该对value字段使用JacksonXmlText注释。

public class Element2 
{
    @JacksonXmlProperty(isAttribute = true)
    private String ns = "yyy";
    @JacksonXmlText
    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}  

然后 XML 看起来像

<Root>
    <Element1 ns="xxx">
        <Element2 ns="yyy">A String</Element2>
    </Element1>
</Root>

对于 Kotlin,您需要使用@field 注释use-site 目标:

data class Element2(
        @field:JacksonXmlProperty(isAttribute = true)
        val ns: String = "yyy",
        @field:JacksonXmlText
        val value: String? = null
)

如果您不喜欢自己定义nsvalue属性的初始值,请使用Kotlin no-args plugin ,它会生成默认构造函数。

不幸的是,我无法发表评论,但我确实想记下flyAssistant 的回答,以防其他人遇到我遇到的同样问题。 您不能将 @JacksonXmlText 添加到构造函数属性。 根据 GitHub 存储库中报告的此问题,此功能可能会在 build 2.13 中添加。 所以现在你必须这样做

data class Element2(@field:JacksonXmlProperty(isAttribute = true) val ns: String = "yyy") {
    @field:JacksonXmlText
    val value: String? = null
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM