[英]Jackson XML Annotations: String element with attribute
我似乎无法找到一种使用 jackson-xml 注释生成 Pojo 的方法,该注释会生成如下所示的 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”周围的元素标签。
您应该对value
字段使用JacksonXmlText注释。
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
注释use-site 目标:
data class Element2(
@field:JacksonXmlProperty(isAttribute = true)
val ns: String = "yyy",
@field:JacksonXmlText
val value: String? = null
)
如果您不喜欢自己定义ns
和value
属性的初始值,请使用Kotlin no-args plugin ,它会生成默认构造函数。
不幸的是,我无法发表评论,但我确实想记下flyAssistant 的回答,以防其他人遇到我遇到的同样问题。 您不能将 @JacksonXmlText 添加到构造函数属性。 根据 GitHub 存储库中报告的此问题,此功能可能会在 build 2.13 中添加。 所以现在你必须这样做
data class Element2(@field:JacksonXmlProperty(isAttribute = true) val ns: String = "yyy") {
@field:JacksonXmlText
val value: String? = null
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.