java - 无法解析具有属性的空 xml 属性

标签 java jackson xml-deserialization

我有以下 xml:

<prog>
    <prop1 attr="attr"> </prop1> 
    <prop2>some</prop2> 
</prog>

我有以下类(class)来代表它:

@JsonIgnoreProperties(ignoreUnknown = true)
@JacksonXmlRootElement(localName = "prog")
public class Prog {

    @JacksonXmlProperty(localName = "prop1")
    private String prop1;

    @JacksonXmlProperty(localName = "prop2")
    private String prop2;

    //getters, setters
}

但它失败并出现以下错误:无法读取文档:无法从字符串值('some')实例化类型[简单类型,类com.xxx.xxx.entities.ro.Prog]的值;没有单字符串构造函数/工厂方法\n [来源:java.io.PushbackInputStream@1bbaaffd;行:18,列:36]

以下 xml 可以很好地解析(使用上面的类):

没有属性

<prog>
    <prop1> </prop1> 
    <prop2>some</prop2> 
</prog>

空 prop1(而不是空格)

<prog>
    <prop1 attr="attr"></prop1> 
    <prop2>some</prop2> 
</prog>

非空 prop1

<prog>
    <prop1 attr="attr"> g</prop1> 
    <prop2>some</prop2> 
</prog>

原始 xml 有效吗?我该如何解析它?
实际上我需要跳过 attr,但我也尝试将其表示为 Object:

@JsonIgnoreProperties(ignoreUnknown = true)
public class XmlElement {

    @JacksonXmlText
    private String value;

    //getters, setters
}

更新: 我在使用 SpringMVC Controller 时调用解析,但它也会重现:

String xml = "<prog>" +
        "<prop1 attr=\"att1\"> </prop1>" +
        "<prop2>some</prop2>" +
        "</prog>";
ObjectMapper xmlmapper = new XmlMapper();
Prog prog = xmlmapper.readValue(xml, Prog.class);

最佳答案

它与 2.7.4 版本的 com.fasterxml.jackson 完美配合。但如果某些库有其他版本(例如早期版本的 Jackson-dataformat-xml ),则会失败并出现各种错误。因此,您必须检查使用了 com.fasterxml.jackson.corejackson-annotationsjackson-dataformat-xml 的版本,并且使它们相同。

关于java - 无法解析具有属性的空 xml 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37355910/

相关文章:

java - 如何更新 TrueVault 中的文档

java - 如何使用 Jackson 反序列化以秒为单位的时间戳?

json - 如何解决 jackson 中属性(property)的 setter/getter 定义冲突

java - android继承对象simplexml

java - 需要 JAXB 中的一个元素或另一个元素

java - 多任务 JavaFX

java - Intellij IDEA 模块依赖

具有 Name 属性的 C# XML 字符串元素

java - Hashtable 与 Collections.synchronizedMap(hashmap)

spring - 如何修改 Spring Cloud AWS 用于反序列化 SQS 消息的对象映射器?