使用XMLMapper和Rest模板进行XML解析

时间:2019-06-01 07:01:18

标签: java rest resttemplate xmlmapper

我正在尝试将XML解析为java对象,该对象通过使用XMLMapper的其余服务响应而接收到,但是我看到以下错误。对于其他休息服务,它工作正常。我什至没有发现差异。

无法读取文档:无法从字符串值('test')实例化类型[简单类型,类Test.Class]的值;没有单字符串构造函数/工厂方法\ n在

1 个答案:

答案 0 :(得分:0)

根据上面的讨论,我在下面提供了代码,您可以检查一下。

XML的结构在下面给出。

<Admin>
    <name>xyz</name>
    <phone>
        <ext>123</ext>
        <num>123456</num>
    </phone>
    <phone>
        <ext>123</ext>
        <num>123456</num>
    </phone>
</Admin>

基于上述xml结构,我创建了这样的对象模型。

public class Phone {
  private String ext;
  private String num;

  public String getExt() {
    return ext;
  }

  public void setExt(String ext) {
    this.ext = ext;
  }

  public String getNum() {
    return num;
  }

  public void setNum(String num) {
    this.num = num;
  }

  @Override
  public String toString() {
    return "Phone{" + "ext='" + ext + '\'' + ", num='" + num + '\'' + '}';
  }
}


import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;

import java.util.ArrayList;
import java.util.List;

public class Admin {
  private String name;

  @JacksonXmlElementWrapper(useWrapping = false)
  private List<Phone> phone = new ArrayList<>();

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public List<Phone> getPhone() {
    return phone;
  }

  public void setPhone(List<Phone> phone) {
    this.phone = phone;
  }

  @Override
  public String toString() {
    return "Admin{" + "name='" + name + '\'' + ", phone=" + phone + '}';
  }
}

用于测试上述情况的代码。

import com.fasterxml.jackson.dataformat.xml.XmlMapper;

import java.io.IOException;

public class TestXMLMapper {

  public static void main(String[] args) throws IOException {
    String xmlString =
        "<Admin>\n"
            + "    <name>xyz</name>\n"
            + "    <phone>\n"
            + "        <ext>123</ext>\n"
            + "        <num>123456</num>\n"
            + "    </phone>\n"
            + "    <phone>\n"
            + "        <ext>123</ext>\n"
            + "        <num>123456</num>\n"
            + "    </phone>\n"
            + "</Admin>";
    XmlMapper xmlMapper = new XmlMapper();
    Admin value = xmlMapper.readValue(xmlString, Admin.class);
    System.out.println("value = " + value);
  }
}

如果要在另一个对象中使用封装的对象,请确保使用此注释@JacksonXmlElementWrapper(useWrapping = false)

为了验证,我使用了 jackson-dataformat-xml版本2.9.8