使用 Jackson 解析 XML 时如何忽略特定节点

Fre*_*red 6 java xml jackson jackson-dataformat-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>
Run Code Online (Sandbox Code Playgroud)

进入这个 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

java.lang.IllegalArgumentException:属性“value”的 setter 定义冲突

cas*_*lin 8

请尝试以下操作:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Bundle {
   ...
}
Run Code Online (Sandbox Code Playgroud)

或者:

mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
Run Code Online (Sandbox Code Playgroud)


小智 0

如果我没记错的话,您可以在对象映射器上设置它,它将避免在不匹配的节点上引发异常。

objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);