我正在尝试将XML解析为java对象,该对象通过使用XMLMapper的其余服务响应而接收到,但是我看到以下错误。对于其他休息服务,它工作正常。我什至没有发现差异。
无法读取文档:无法从字符串值('test')实例化类型[简单类型,类Test.Class]的值;没有单字符串构造函数/工厂方法\ n在
答案 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