让我们说我的XML是:
<someObject>
<someArray>
<element>111</element>
<element>222</element>
</someArray>
</someObject>
我是否可以使用Java内置类型来反序列化此XML而无需自定义反序列化代码?
例如,如果我使用Map<Object, Object>
,则只保留一个element
,另一个被覆盖! :
String xmlStr = "<someObject><someArray><element>111</element><element>222</element></someArray></someObject>";
Map<Object, Object> resultObj = getXmlMapper().readValue(xmlStr, new TypeReference<Map<Object, Object>>(){});
System.out.println(resultObj);
打印:
{someArray={element=222}}
杰克逊能理解并且可以正确处理数组吗?
答案 0 :(得分:1)
在您的具体情况下,您可以使用
new TypeReference<Map<Object, List>>
输出:{someArray = [111,222]}。
如果您的XML更复杂,我更倾向于使用适当的结构。
@JacksonXmlRootElement(localName = "someObject")
public static class SomeObject {
@JacksonXmlProperty(localName = "someArray")
List<String> someArray;
@Override
// for testing
public String toString() {
return someArray.toString();
}
}
public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
ObjectMapper map = new XmlMapper();
String xmlStr = "<someObject><someArray><element>111</element><element>222</element></someArray></someObject>";
SomeObject resultObj = map.readValue(xmlStr, new TypeReference<SomeObject>(){});
System.out.println(resultObj);
}
<强>输出强>
[111,222]
或者使用数组
@JacksonXmlRootElement(localName = "someObject")
public static class SomeObject {
@JacksonXmlProperty(localName = "someArray")
String[] someArray;
@Override
public String toString() {
return Arrays.asList(someArray).toString();
}
}