Java Jackson XML注释:带属性的字符串元素
我似乎找不到使用jackson xml注释生成如下xml的Pojo的方法: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"&
<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.