Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jackson dataformat XML库将XML中的空标记转换为java属性_Java_Xml_Spring Boot_Jackson_Xml Deserialization - Fatal编程技术网

使用jackson dataformat XML库将XML中的空标记转换为java属性

使用jackson dataformat XML库将XML中的空标记转换为java属性,java,xml,spring-boot,jackson,xml-deserialization,Java,Xml,Spring Boot,Jackson,Xml Deserialization,我有以下XML需要在springboot应用程序中转换为POJO。我正在为此使用jackson数据格式xml模块 <Root> <Element1 ns="xxx"> <Element2/> </Element1> </Root> 元素1 Pojo: @JacksonXmlRootElement(localName = "Root") public class R

我有以下
XML
需要在
springboot
应用程序中转换为
POJO
。我正在为此使用
jackson数据格式xml
模块

<Root>
    <Element1 ns="xxx">
        <Element2/>
    </Element1>
</Root>
元素1 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;
    }
}
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.beandSerializer
类将给定的
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;
    }
}