使用 jackson-dataformat-xml 库将 XML 中的空标签转换为 java 属性
Convert an empty tag in XML to java attribute using jackson-dataformat-xml library
我有以下 XML
需要在 Spring Boot
应用程序中转换为 POJO
。为此,我正在使用 jackson-dataformat-xml
模块。
<Root>
<Element1 ns="xxx">
<Element2/>
</Element1>
</Root>
根 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;
}
}
元素 1 Pojo:
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.BeanDeserializer
class 将给定的 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;
}
}
我有以下 XML
需要在 Spring Boot
应用程序中转换为 POJO
。为此,我正在使用 jackson-dataformat-xml
模块。
<Root>
<Element1 ns="xxx">
<Element2/>
</Element1>
</Root>
根 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;
}
}
元素 1 Pojo:
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.BeanDeserializer
class 将给定的 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;
}
}