我正在尝试反序列化XML。
<server>
<url>localhost</url>
<port>8080</port>
</server>
至POJO
class Storage {
private Server server;
}
class Server {
private String url;
private Integer port;
}
这是我的防火代码
resources = new FileInputStream("/resources/config/" + file);
mapper = new ObjectMapper();
storage = mapper.readValue(resources, Storage.class);
但它不起作用。
com.fasterxml.jackson.core.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
我试图将JAX-B注释添加到Storage和Server类中,但出现了相同的错误。
UPD
当我添加我收到的com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "url"
的mapper = new XmlMapper();
时
首先,ObjectMapper
实例用于反序列化JSON。所以您将无法按原样使用它。请使用XmlMapper
。
其次,XML的根<server>
包含两个元素<url>
和<port>
。但是你的根Java类型,Storage
,
storage = mapper.readValue(resources, Storage.class);
只包含一个server
。因此,您需要一个包装器元素作为XML中的根元素
<Storage>
<server>
<url>localhost</url>
<port>8080</port>
</server>
</Storage>
另外,我想你是指
private Server url;
成为
private String url;