当我尝试解析下面的XML时,我得到了一个Jackson的错误:
<root>
<aCollection>
<language xml:lang="en">
<entry id="1" value="foo"/>
<entry id="2" value="bar"/>
<entry id="3" value="blah"/>
</language>
</aCollection>
</root>
字符串
我使用的类是:
@Data
@JacksonXmlRootElement(localName = "root")
public class RootDTO {
@JacksonXmlProperty(localName = "aCollection")
private CollectionDTO collection;
}
@Data
public class CollectionDTO {
@JacksonXmlProperty(localName = "language")
LanguageDTO language;
}
@Data
public class LanguageDTO {
@JacksonXmlProperty(localName = "entry")
EntryDTO[] entries;
}
@Data
public class EntryDTO {
@JacksonXmlProperty(isAttribute = true)
private String id;
@JacksonXmlProperty(isAttribute = true)
private String value;
}
型
错误:Can not instantiate value of type [simple type, class com.tinkerdesk.viewer.model.DTO.EntryDTO] from JSON String; no single-String constructor/factory method
如果我删除数组括号,它可以工作,但当然只解析第一个entry
元素。我发现我可能应该在EntryDTO[] entries;
之上使用@JacksonXmlElementWrapper(useWrapping = false)
,因为元素没有 Package 。然而,这对我来说并不容易,因为在com.fasterxml.jackson.xml.annotate.JacksonXmlElementWrapper
中没有useWrapping
。我的Jackson核心版本是2.9.6和xml-databind 0.6.2.现在有更新的方法吗?
2条答案
按热度按时间v64noz0r1#
好吧,没关系,我犯了一个愚蠢的错误。JacksonDataformat Xml的0.6.2版本应该首先让我怀疑。似乎在某个时候,他们转移到了一个新的命名空间,我在Gradle中使用了旧的命名空间,不幸的是,它解析为2011年最后一次更新的Maven存储库。更新命名空间使其解析为2.9.5,其中包含useWrapping属性。设置这就解决了问题。
cnjp1d6j2#
就像Tom回答的那样,我使用旧的命名空间作为依赖。
从pom.xml中删除以下旧依赖项
字符串
并补充说:
型