使用 jackson-dataformat-xml 库将 XML 中的空标签转换为 java 属性
Posted
技术标签:
【中文标题】使用 jackson-dataformat-xml 库将 XML 中的空标签转换为 java 属性【英文标题】:Convert an empty tag in XML to java attribute using jackson-dataformat-xml library 【发布时间】:2020-11-25 20:38:56 【问题描述】:我有以下XML
需要在Spring Boot
应用程序中转换为POJO
。我正在为此使用jackson-dataformat-xml
模块。
<Root>
<Element1 ns="xxx">
<Element2/>
</Element1>
</Root>
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;
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;
Element1
中的属性 element2
始终设置为 false
。如果存在 Element2 标签,有什么方法可以将其设置为true
;否则false
?
【问题讨论】:
【参考方案1】:默认情况下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;
【讨论】:
以上是关于使用 jackson-dataformat-xml 库将 XML 中的空标签转换为 java 属性的主要内容,如果未能解决你的问题,请参考以下文章
项目引入 jackson-dataformat-xml 后 RestTemplate 序列化的 JSON 异常问题分析
项目引入 jackson-dataformat-xml 后 RestTemplate 序列化的 JSON 异常问题分析
项目引入 jackson-dataformat-xml 后 RestTemplate 序列化的 JSON 异常问题分析
java对象转xml的问题 用的是jackson-dataformat-xml.jar