使用 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

引入 jackson-dataformat-xml 后,默认响应结果是 json 还是 xml?

引入 jackson-dataformat-xml 后,默认响应结果是 json 还是 xml?