使用jackson数据格式XML库将XML中的空标记转换为java属性



我有以下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类将给定的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;
}
}

相关内容

  • 没有找到相关文章

最新更新