【问题标题】:Convert an empty tag in XML to java attribute using jackson-dataformat-xml library使用 jackson-dataformat-xml 库将 XML 中的空标签转换为 java 属性
【发布时间】: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?

【问题讨论】:

    标签: java xml spring-boot jackson xml-deserialization


    【解决方案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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2023-02-05
      • 2019-11-09
      • 1970-01-01
      • 2015-06-28
      • 2019-01-04
      • 2018-10-12
      相关资源
      最近更新 更多