我试图反序列化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
当我添加mapper = new XmlMapper();
时,我收到com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "url"
答案 0 :(得分:2)
首先,ObjectMapper
个实例用于反序列化JSON。所以你将无法按原样使用它。使用XmlMapper
。
其次,XML的根<server>
包含两个元素<url>
和<port>
。但是您的根Java类型Storage
,
storage = mapper.readValue(resources, Storage.class);
只包含一个,server
。因此,您需要一个包装器元素作为XML中的root用户
<Storage>
<server>
<url>localhost</url>
<port>8080</port>
</server>
</Storage>
另外,我假设你的意思是
private Server url;
是
private String url;