我有以下 XML
需要转换成POJO
在 Spring Boot
应用程序。我正在使用 jackson-dataformat-xml
为此的模块。
<Root>
<Element1 ns="xxx">
<Element2/>
</Element1>
</Root>
根宝约:@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;
}
}
Element1 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;
}
}
房产 element2
在 Element1
始终设置为 false
.有什么办法可以设置为true
如果 元素2 标签存在;否则 false
?
最佳答案
默认 Jackson
使用 com.fasterxml.jackson.databind.deser.BeanDeserializer
给定的类做反序列化XML
元素到 POJO
.这个解串器调用 setter
仅当相应节点存在于 XML
中时才使用该方法有效载荷。如果有效载荷中不存在节点 - setter
方法没有被调用。我们可以利用这种行为。
因为我们要设置总是true
我们应该创建新的私有(private) 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;
}
}
关于java - 使用 jackson-dataformat-xml 库将 XML 中的空标记转换为 java 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63269084/