java - XML 反序列化导致 JsonMappingException : Can not deserialize instance of class out of VALUE_STRING token

标签 java xml jackson

我有这样的xml:

<game quarter="2">
  <quarter number="1">
    ...
  </quarter>
  <quarter number="2">
    ...
  </quarter>
</game>

还有我的 POJO 类:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Game {

    @JacksonXmlElementWrapper(localName = "quarter")
    public Quarter[] quarters;

当我尝试使用以下方法反序列化 xml 时:

xmlMapper.readValue(getFileContent(PBP_XML_PATH), Game.class);

我得到:

com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of Game$Quarter[] out of VALUE_STRING token
  at [Source: java.io.StringReader@5f45632; line: 4, column: 1] (through reference chain: Game["quarter"])
  at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:261)
  at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:261)
  at com.fasterxml.jackson.databind.DeserializationContext.reportMappingException(DeserializationContext.java:1234)
  at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1122)
  at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1075)
  at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.handleNonArray(ObjectArrayDeserializer.java:275)
  at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:179)
  at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:20)
  at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:499)
  at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:108)
  at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:276)
  at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:140)
  at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3789)
  at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2833)

看起来 Jackson 无法处理同名的属性和属性。

最佳答案

正如它所显示的,这是 jackson-dataformat-xml-2.9.0 版本中的一个已知问题:

Attribute / element name collision cannot be configured during deserialization

If an element has an attribute and sub-element with the same name, the attribute seems to be ignored and the element value used

Currently there is no way to handle synonyms (either between attribute or element; or between properties with different namespace).

关于java - XML 反序列化导致 JsonMappingException : Can not deserialize instance of class out of VALUE_STRING token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42598528/

相关文章:

java - 什么 xml 解析器符合这些要求?

java - Jackson 和 GSON 无法与 Google App Engine 一起使用

java - 模型更改时自动更新 jtable 列

java - Kotlin 基础继承方案

c# - 在 Xamarin.Android 中找不到与给定名称(在 'headerLayout' 处)匹配的资源

jquery - 如何从 XML 文件输出 HTML?

java - 测试 Lucene Query 是否匹配所有文档

java - 有任何集合对象可以保存两个以上元素的组合列表吗?

java - 从 Java 对象生成正确的 JSON - Jackson

java - @JsonValue 在枚举字段上,当此枚举用作映射键时