使用jackson dataformat XML库将XML中的空标记转换为java属性
我有以下使用jackson dataformat XML库将XML中的空标记转换为java属性,java,xml,spring-boot,jackson,xml-deserialization,Java,Xml,Spring Boot,Jackson,Xml Deserialization,我有以下XML需要在springboot应用程序中转换为POJO。我正在为此使用jackson数据格式xml模块 <Root> <Element1 ns="xxx"> <Element2/> </Element1> </Root> 元素1 Pojo: @JacksonXmlRootElement(localName = "Root") public class R
XML
需要在springboot
应用程序中转换为POJO
。我正在为此使用jackson数据格式xml
模块
<Root>
<Element1 ns="xxx">
<Element2/>
</Element1>
</Root>
元素1 Pojo:
@JacksonXmlRootElement(localName = "Root")
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;
@JacksonXmlProperty(localName = "Element2")
private boolean element2;
public boolean getElement2() {
return element2;
}
public void setElement2(boolean element2) {
this.element2 = element2;
}
}
Element1
中的属性element2
始终设置为false
。如果存在Element2标记,是否有办法将其设置为true
;否则false
?默认情况下Jackson
使用com.fasterxml.Jackson.databind.deser.beandSerializer
类将给定的XML
元素反序列化到POJO
。仅当XML
有效负载中存在相应的节点时,此反序列化程序才会调用setter
方法。在这种情况下,有效负载中不存在节点-setter
方法不会被调用。我们可以利用这种行为
因为我们希望总是设置true
,所以我们应该创建新的私有setter方法,并强制Jackson
将其与@JacksonXmlProperty
注释一起使用。下面您可以看到示例:
class Element1 {
@JacksonXmlProperty(isAttribute = true)
private String ns;
private boolean element2;
public boolean getElement2() {
return element2;
}
public void setElement2(boolean element2) {
this.element2 = element2;
}
@JacksonXmlProperty(localName = "Element2")
private void setElement2ByJackson(boolean ignored) {
this.element2 = true;
}
}