Jackson XML 映射重复元素组

使用 Jackson,我必须创建一个可以编组到以下 XML 的 Java 类


<Root>

   <Key>key1</Key>

   <Value>value1</Value>

   <Key>key2</Key>

   <Value>value2</Value>

   ...

</Root>

继类是封闭的,但秩序Key和Value不正确。


@JacksonXmlRootElement(localName = "Root")

class Root {

    @JacksonXmlProperty(localName = "Key")

    private String[] keys;

    @JacksonXmlProperty(localName = "Value")

    private String[] values;

}

如何创建一个以正确顺序映射到重复元素对的类?


慕妹3242003
浏览 465回答 1
1回答

catspeake

我做到了!在自定义序列化程序的帮助下。首先是根元素:@JacksonXmlRootElement(localName = "Root")class Root {&nbsp; &nbsp; @JacksonXmlElementWrapper(useWrapping = false)&nbsp; &nbsp; private List<Wrapper> keyValueList;&nbsp; &nbsp; // getters, setters}Key和Value对的包装类:@JsonSerialize(using = WrapperSerializer.class)class Wrapper {&nbsp; &nbsp; private String key;&nbsp; &nbsp; private String value;&nbsp; &nbsp; // getters, setters, all args constructors}和序列化器:public class WrapperSerializer extends StdSerializer<Wrapper> {&nbsp; &nbsp; public WrapperSerializer() {&nbsp; &nbsp; &nbsp; &nbsp; this(Wrapper.class);&nbsp; &nbsp; }&nbsp; &nbsp; protected WrapperSerializer(Class<Wrapper> t) {&nbsp; &nbsp; &nbsp; &nbsp; super(t);&nbsp; &nbsp; }&nbsp; &nbsp; @Override&nbsp; &nbsp; public void serialize(Wrapper value, JsonGenerator gen, SerializerProvider provider) throws IOException {&nbsp; &nbsp; &nbsp; &nbsp; gen.writeRaw(new StringBuilder()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .append("<Key>")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .append(value.getKey())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .append("</Key>")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .append("<Value>")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .append(value.getValue())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .append("</Value>")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .toString());&nbsp; &nbsp; }}让我们测试一下:Root ref = new Root();ref.setKeyValueList(Arrays.asList(&nbsp; &nbsp; &nbsp; &nbsp; new Wrapper("k1", "v1"),&nbsp; &nbsp; &nbsp; &nbsp; 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>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java