Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jackson XML注释:带属性的字符串元素_Java_Xml_Jackson - Fatal编程技术网

Java Jackson XML注释:带属性的字符串元素

Java Jackson XML注释:带属性的字符串元素,java,xml,jackson,Java,Xml,Jackson,我似乎找不到使用jackson xml注释生成如下xml的Pojo的方法: <Root> <Element1 ns="xxx"> <Element2 ns="yyy">A String</Element2> </Element1> </Root> <Root> <Element1 ns="xxx"> <Element2 ns="yyy"&

我似乎找不到使用jackson xml注释生成如下xml的Pojo的方法:

<Root>
    <Element1 ns="xxx">
        <Element2 ns="yyy">A String</Element2>
    </Element1>
</Root>
<Root>
    <Element1 ns="xxx">
        <Element2 ns="yyy"><value>A String</value></Element2>
    </Element1>
</Root>
元素1 POJO

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

    public String getElement1() {
        return element1;
    }

    public void setElement1(String element1) {
        this.element1 = element1;
    }
}
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;
    }
}
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;
    }
}
元素2 POJO

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

    public String getElement1() {
        return element1;
    }

    public void setElement1(String element1) {
        this.element1 = element1;
    }
}
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;
    }
}
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">A String</Element2>
    </Element1>
</Root>
<Root>
    <Element1 ns="xxx">
        <Element2 ns="yyy"><value>A String</value></Element2>
    </Element1>
</Root>

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

您应该为
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>

一串

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

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

如果您不喜欢自己定义
ns
value
属性的初始值,请使用,这将生成一个默认构造函数。

不幸的是,我无法发表评论,但我确实想做一个说明,以防其他人遇到与我相同的问题。无法将@JacksonXmlText添加到构造函数属性。基于GitHub repo中报告的这一点,可以在构建2.13中添加此功能。 所以现在你必须这么做

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

我很好奇为什么要使用特定于Jackson的注释而不是JAXB注释。Jackson主要是一个用于生成JSON而不是XML的框架,因此,它忽略了JAXB的一些功能。事实证明,我是从错误的依赖项导入的,并且获取了不包含注释的Jackson dataformat XML的旧版本。尽管杰克逊非常出色,但他们的记录却令人震惊。因此,很难找到哪些版本在哪里,以及哪些注释在这些版本中可用。我以前肯定翻阅过他们的文档,我知道你的意思,但这一个肯定在我身上-他们的依赖性在他们的github页面上被公然提及:。我在寻找gradle依赖项,谷歌粘贴太快了。@llya:我们不需要
Root
类上的
@JacksonXmlRootElement
吗?如果有人提供了你想要的东西,那就太棒了+1.