我想知道在使用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:与下列设置器的定义冲突 属性“值”
答案 0 :(得分:1)
尝试以下操作:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Bundle {
...
}
或者:
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
答案 1 :(得分:0)
如果我没记错的话,可以在对象映射器上进行设置,这样可以避免在不匹配的节点上抛出异常。
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES,false);
答案 2 :(得分:0)
要绑定属性,可以使用@JsonProperty Jackson Annotations
答案 3 :(得分:0)
如果您不介意使用其他库,则SimpleXml默认情况下会这样做:
public class Bundle {
@XmlWrapperTag("id")
@XmlName("value")
@XmlAttribute
private String id;
@XmlWrapperTag("type")
@XmlName("value")
@XmlAttribute
private String type;
}
然后序列化并打印:
final SimpleXml simple = new SimpleXml();
final Bundle bundle = simple.fromXml(xml, Bundle.class);
System.out.println(bundle.id + " : " + bundle.type);
这将打印:
myBundleId : message
SimpleXml位于Maven中心
<dependency>
<groupId>com.github.codemonstur</groupId>
<artifactId>simplexml</artifactId>
<version>1.5.5</version>
</dependency>