0

我正在尝试反序列化 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"

4

1 回答 1

2

首先,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;
于 2014-10-08T01:00:02.457 回答