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

标签 java xml spring-boot jackson xml-deserialization

我有以下 XML需要转换成POJOSpring Boot应用程序。我正在使用 jackson-dataformat-xml为此的模块。

<Root>
    <Element1 ns="xxx">
        <Element2/>
    </Element1>
</Root>
根宝约:
@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;
    }
}
房产 element2Element1始终设置为 false .有什么办法可以设置为true如果 元素2 标签存在;否则 false ?

最佳答案

默认 Jackson使用 com.fasterxml.jackson.databind.deser.BeanDeserializer给定的类做反序列化XML元素到 POJO .这个解串器调用 setter仅当相应节点存在于 XML 中时才使用该方法有效载荷。如果有效载荷中不存在节点 - setter方法没有被调用。我们可以利用这种行为。
因为我们要设置总是true我们应该创建新的私有(private) 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;
    }
}

关于java - 使用 jackson-dataformat-xml 库将 XML 中的空标记转换为 java 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63269084/

相关文章:

java - Android list 包名

c# - 从 XML 读取/写入枚举

php - 返回 mysql 字段中的 xml 参数

java - Spring Boot + Cloud Firestore 集成测试

spring - WebTestClient 未注入(inject)

java - 捕获 Java Hashmap 中的错误条件

java - Spring Boot 微服务在 docker 容器内运行时启用 Https

java - 如何在 jenkins 上跨多个项目构建作业管理一个通用的 ant 构建脚本?

java - 如何从java动态添加@XmlRoot标签?

java - 仅设置拦截器关闭端点