FasterXML:无法将表单XML反序列化为POJO

时间:2014-10-07 22:26:38

标签: java xml fasterxml

我试图反序列化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"

1 个答案:

答案 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;