Java Jackson XML解析器在标记丢失时失败

Java Jackson XML解析器在标记丢失时失败,java,jackson,jackson-dataformat-xml,Java,Jackson,Jackson Dataformat Xml,当出现如下属性时,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 @J

当出现如下属性时,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
@JsonIgnoreProperties(ignoreUnknown = true)
public class Example {
    @JacksonXmlProperty(localName = "some-float-value")
    private Float someValue;
}
如果我删除属性,使字段看起来像这样,它会正常运行:

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

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

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);
@JsonIgnoreProperties(ignoreUnknown = true)
@JacksonXmlRootElement(localName = "some-float-value")
public class Example {
    
    @JacksonXmlText
    private Float someValue;
}   
您还必须使用
JacksonXmlRootElement
注释和
JacksonXmlText
注释修改
示例
类,如下所示:

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);
@JsonIgnoreProperties(ignoreUnknown = true)
@JacksonXmlRootElement(localName = "some-float-value")
public class Example {
    
    @JacksonXmlText
    private Float someValue;
}   

通过从Jackson 2.11.3版跳到2.12.3版来解决问题

这是bug Jackson 2.11.3版。在版本2.12中解决了这个问题。3@Dasma,谢谢你提供的信息,我不知道。