35

我似乎找不到一种方法来制作 Pojo 使用会生成如下 xml 的 jackson-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”周围的元素标签我不想显示。

4

3 回答 3

57

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

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>
于 2013-11-07T21:38:06.427 回答
4

对于 Kotlin,您需要使用@field 注解使用站点目标:

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

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

于 2021-02-16T10:56:19.080 回答
4

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

data class Element2(@field:JacksonXmlProperty(isAttribute = true) val ns: String = "yyy") {
    @field:JacksonXmlText
    val value: String? = null
}
于 2021-06-04T21:21:07.543 回答