Jackson XML Annotations:带有属性的String元素

jty*_*ler 24 java xml jackson

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

<Root>
    <Element1 ns="xxx">
        <Element2 ns="yyy">A String</Element2>
    </Element1>
</Root>
Run Code Online (Sandbox Code Playgroud)

我似乎最接近的是:

根POJO:

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

    public String getElement1() {
        return element1;
    }

    public void setElement1(String element1) {
        this.element1 = element1;
    }
}
Run Code Online (Sandbox Code Playgroud)

Element1 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Element2 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

但这会返回以下内容:

<Root>
    <Element1 ns="xxx">
        <Element2 ns="yyy"><value>A String</value></Element2>
    </Element1>
</Root>
Run Code Online (Sandbox Code Playgroud)

"A String"周围的元素标签我不想显示.

Ily*_*lya 37

您应该将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;
    }
}  
Run Code Online (Sandbox Code Playgroud)

然后XML会是这样的

<Root>
    <Element1 ns="xxx">
        <Element2 ns="yyy">A String</Element2>
    </Element1>
</Root>
Run Code Online (Sandbox Code Playgroud)

  • @llya:我们在“Root”类上不需要“@JacksonXmlRootElement”吗? (2认同)
  • 当有人准确地提供您正在寻找的东西时,真是太棒了。+1 (2认同)

小智 5

为了补充FlyingAssistant 的答案,您不能将 @JacksonXmlText 添加到构造函数属性。根据GitHub 存储库中报告的此问题,此功能可能会添加到构建 2.13 中。所以现在你必须这样做

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