簡體   English   中英

傑克遜XML地圖重復元素組

[英]Jackson XML map repeating element groups

使用Jackson,我必須創建一個可以編組為以下XML的Java類。

<Root>
   <Key>key1</Key>
   <Value>value1</Value>
   <Key>key2</Key>
   <Value>value2</Value>
   ...
</Root>

后續課程已關閉,但KeyValue的順序不正確。

@JacksonXmlRootElement(localName = "Root")
class Root {
    @JacksonXmlProperty(localName = "Key")
    private String[] keys;
    @JacksonXmlProperty(localName = "Value")
    private String[] values;
}

如何創建一個類,以正確的順序映射到重復的元素對?

我做的! 借助自定義序列化程序。

首先,根元素:

@JacksonXmlRootElement(localName = "Root")
class Root {
    @JacksonXmlElementWrapper(useWrapping = false)
    private List<Wrapper> keyValueList;
    // getters, setters
}

KeyValue對的包裝器類:

@JsonSerialize(using = WrapperSerializer.class)
class Wrapper {
    private String key;
    private String value;
    // getters, setters, all args constructors
}

和序列化器:

public class WrapperSerializer extends StdSerializer<Wrapper> {
    public WrapperSerializer() {
        this(Wrapper.class);
    }

    protected WrapperSerializer(Class<Wrapper> t) {
        super(t);
    }

    @Override
    public void serialize(Wrapper value, JsonGenerator gen, SerializerProvider provider) throws IOException {
        gen.writeRaw(new StringBuilder()
                .append("<Key>")
                .append(value.getKey())
                .append("</Key>")
                .append("<Value>")
                .append(value.getValue())
                .append("</Value>")
                .toString());
    }
}

讓我們測試一下:

Root ref = new Root();
ref.setKeyValueList(Arrays.asList(
        new Wrapper("k1", "v1"),
        new Wrapper("k2", "v2")));
XmlMapper xmlMapper = new XmlMapper();
String output = xmlMapper.writeValueAsString(ref);
System.out.println(output);

結果:

<Root><Key>k1</Key><Value>v1</Value><Key>k2</Key><Value>v2</Value></Root>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM