[英]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.