繁体   English   中英

Jackson XML 解析器在标签时失败

[英]Jackson XML parser fails when tags

当出现如下属性时,Jackson XML 解析器会失败:

<some-float-value fr:relevance="true">99</some-float-value>

错误日志如下所示:

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.Float` out of START_OBJECT token

如果我删除了属性,所以字段看起来像这样,就可以了:

<some-float-value>99</some-float-value>

我要解析的 class 是这样的:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Example {
    @JacksonXmlProperty(localName = "some-float-value")
    private Float someValue;
}

如果没有fr命名空间, @JsonIgnoreProperties(ignoreUnknown = true)注释就足以忽略relevance属性,但不幸的是,情况并非如此:如果您想摆脱 xml 文件中的命名空间,您可以指示您的XmlMapper忽略它们传递自定义XmlFactory作为构造函数参数,如下所示:

XMLInputFactory input = new WstxInputFactory();
input.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.FALSE);
XmlMapper  mapper = new XmlMapper(new XmlFactory(input, new WstxOutputFactory()));
Example example = mapper.readValue(xml, Example.class);

您还必须使用JacksonXmlRootElement注释和JacksonXmlText注释来修改您的Example class,如下所示:

@JsonIgnoreProperties(ignoreUnknown = true)
@JacksonXmlRootElement(localName = "some-float-value")
public class Example {
    
    @JacksonXmlText
    private Float someValue;
}   

通过从 Jackson 版本 2.11.3 到 2.12.3 的碰撞来解决

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM