java - jackson 奇怪的 XML 反序列化

标签 java xml jackson deserialization xml-deserialization

我正在尝试使用 jackson xml 在 POJO 中反序列化那个奇怪的(格式错误的?)xml:

<module id="1">
    <field id="1">
      <title>test</title>
      <value>test value</value>
    </field>
    <field id="6">
      <title>test2</title>
      <value>first value</value>
      <value checked="false">second value</value>
    </field>
</module>

这是我目前使用的模型:

public class Field{

    @JacksonXmlProperty(isAttribute = true)
    private String id;

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

    @JsonDeserialize(as=Value.class)
    private Value value;
}


public class Value{

    @JacksonXmlProperty(isAttribute = true)
    private String checked;

    @JacksonXmlText(value = true)
    private String value;
}

到目前为止,我几乎可以阅读除“value”标签之外的所有内容。 如果只有一个“值(value)”标签我可以拥有它,但是一旦有多个“值(value)”标签我只得到最后一个!我当然需要得到一切。

我还尝试放置一个 Value 类数组,但这似乎使 jackson 崩溃了。

任何帮助将不胜感激^^ 谢谢!

最佳答案

将值作为列表或数组并使用 @JacksonXmlElementWrapper 注释。试试这个。

import java.io.File;
import java.util.List;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlText;

@JacksonXmlRootElement
class Module {
    @JacksonXmlProperty(isAttribute = true)
    private String id;

    @JacksonXmlProperty(localName = "field")
    @JacksonXmlElementWrapper(useWrapping=false)
    List<Field> field;

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public List<Field> getField() {
        return field;
    }
    public void setField(List<Field> field) {
        this.field = field;
    }
    @Override
    public String toString() {
        return "Module [id=" + id + ", " + field + "]";
    }
}

class Field {

    @JacksonXmlProperty(isAttribute = true)
    private String id;

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

    @JacksonXmlProperty(localName = "value")
    @JacksonXmlElementWrapper(useWrapping=false)
    private List<Value> value;

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public List<Value> getValue() {
        return value;
    }
    public void setValue(List<Value> value) {
        this.value = value;
    }
    @Override
    public String toString() {
        return "Field [id=" + id + ", title=" + title + ", value=" + value
                + "]";
    }
}

class Value{

    @JacksonXmlProperty(isAttribute = true)
    private String checked;

    @JacksonXmlText(value = true)
    private String value;

    public String getChecked() {
        return checked;
    }
    public void setChecked(String checked) {
        this.checked = checked;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    @Override
    public String toString() {
        return "Value [checked=" + checked + ", " + value + "]";
    }
}

public class JacksonXmlParser {

    public static void main(String[] args) throws Exception {
        ObjectMapper xmlMapper = new XmlMapper();
        Module obj = xmlMapper.readValue(new File("module.xml"), Module.class);
        System.out.println(obj);
    }

}

关于java - jackson 奇怪的 XML 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32372799/

相关文章:

java - 如何使用 Jackson 反序列化 null 类型 JSON 字段

Java 7u55 Eclipse 系统片段类加载器

java - HashSet 值计算错误

xml - Apache 文件缓存

javascript - 使用 Google map API (XML) 切换标记

java - Json Jackson 在没有 setter 的情况下反序列化对象

java - Jackson 在两个位置反序列化与反序列化整个 json 的性能

java - 没有临时文件的一行交换在Java中不起作用?

java - Spring 启动 : Cannot access REST Controller on localhost (404)

python - 使用 ElementTree 获取 python3 中的所有 xml 属性值