无法使用Jackson分析xml中的元素列表

bmvo0sr5  于 6个月前  发布在  其他
关注(0)|答案(2)|浏览(77)

当我尝试解析下面的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.现在有更新的方法吗?

v64noz0r

v64noz0r1#

好吧,没关系,我犯了一个愚蠢的错误。JacksonDataformat Xml的0.6.2版本应该首先让我怀疑。似乎在某个时候,他们转移到了一个新的命名空间,我在Gradle中使用了旧的命名空间,不幸的是,它解析为2011年最后一次更新的Maven存储库。更新命名空间使其解析为2.9.5,其中包含useWrapping属性。设置这就解决了问题。

cnjp1d6j

cnjp1d6j2#

就像Tom回答的那样,我使用旧的命名空间作为依赖。
从pom.xml中删除以下旧依赖项

<!--<dependency> <groupId>com.fasterxml</groupId> <artifactId>jackson-xml-databind</artifactId> <version>RELEASE</version> 
</dependency>-->

字符串
并补充说:

<dependency><groupId>com.fasterxml.jackson.dataformat</groupId>
 <artifactId>jackson-dataformat-xml</artifactId>
 <version>2.15.2</version>
 </dependency>

相关问题