首页 > 解决方案 > 使用 Jackson 解析 XML 时如何忽略特定节点

问题描述

我想知道在使用 Jackson ML 模块解析 XML 时是否可以忽略一个或多个节点。

我希望能够解析这个 XML

<bundle>
  <id value="myBundleId"/>
  <meta>
    <profile value="http://myurl/profile1" />
    <profile value="http://myurl/profile2" />
    <tag>
      <system value="https://myurl/system" />
      <code value="myAppCode"/>
    </tag>
  </meta>
  <type value="message" />
</bundle>

进入这个 POJO 对象

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;

import lombok.Data;

@Data
public class Bundle {

    @JacksonXmlElementWrapper(localName = "id")
    @JacksonXmlProperty(isAttribute = true, localName = "value")
    private String id;

    @JacksonXmlElementWrapper(localName = "type")
    @JacksonXmlProperty(isAttribute = true, localName = "value")
    private String type;
}

现在它不起作用,因为我认为注释 @JacksonXmlElementWrapper 仅适用于列表。

它还给了我以下错误消息:

java.lang.IllegalArgumentException:属性“值”的设置器定义冲突

标签: javaxmljacksonjackson-dataformat-xml

解决方案


尝试以下操作:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Bundle {
   ...
}

或者:

mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

推荐阅读