Jackson XML Annotations: String element with attribute

2022-09-01 03:44:29

我似乎找不到一种方法来制作Pojo使用jackson-xml注释来生成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>

我不想显示的“字符串”周围的元素标签。


答案 1

您应该对字段使用 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>

答案 2

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

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

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


推荐