2

私のXMLが次のようになっているとしましょう:

<someObject>
  <someArray>
    <element>111</element>
    <element>222</element>
  </someArray>
</someObject>

カスタム逆シリアル化コードを必要とせずに、この XML を逆シリアル化するために使用できる Java 組み込み型はありますか?

たとえば、 を使用するMap<Object, Object>と、1 つだけelementが保持され、もう 1 つが上書きされます。:

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}}

ジャクソンが理解し、配列を正しく処理できるタイプはありますか?

4

1 に答える 1

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();
    }
}
于 2016-01-31T18:44:55.527 に答える