【问题标题】:Jackson XML Deserialization - Save an Unrecognized FieldJackson XML 反序列化 - 保存无法识别的字段
【发布时间】:2015-04-24 06:09:05
【问题描述】:

我正在使用 Jackson 反序列化服务器返回的 XML 文件。我收到 UnrecognizedPropertyException 错误消息“无法识别的字段”“”。

有问题的 XML:

<Identifiers>
    <Identifier type="Organisational Study">Q2736g</Identifier>
    <Identifier type="NCT">NCT00109200</Identifier>
</Identifiers>

堆栈跟踪:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "" (class sloan.scraper.Trial$Identifier), not marked as ignorable (3 known properties: , "data2", "type", "data"])
 at [Source: java.io.StringReader@28c2f254; line: 1, column: 547] (through reference chain: sloan.mit.cortellisScraper.Trial["Identifiers"]->sloan.mit.cortellisScraper.Identifier[""])
    at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:79)
    at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:579)
    at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:672)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:906)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:328)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
    at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:147)
    at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:18)
    at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:375)
    at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:107)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:308)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2796)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1942)
    at sloan.mit.cortellisScraper.Main.fetchJson(Main.java:173)
    at sloan.mit.cortellisScraper.Main.main(Main.java:64)

如何使用 Jackson 来保存无法识别的字段?

【问题讨论】:

    标签: java xml json jackson


    【解决方案1】:

    您无法保存无法识别的字段,因为 Jackson 不知道将其映射到哪里。

    两件事:

    1.) 检查/修改您的对象模型并确保它与 XML 匹配。

    2.) 使用 @JsonIgnoreProperties(ignoreUnknown=true) 注释您的类,以防止发生此错误。但是,无法识别的字段的值将会丢失。

    【讨论】:

    • 这是我得到的输出:[类型:null |数据:Q2736g,类型:NCT |数据:null]。 Jackson 知道将“”字段放在列表中第一项的位置,但不是第二项。它还丢失了第一项的 Type 变量。我的数据模型似乎是正确的
    猜你喜欢
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 2019-10-21
    • 2016-10-25
    • 2016-02-12
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多