我有一张地图,我想把它整理成XML。只要有大量不同类型的地图,我真的不想为每个地图编写自定义的XmlAdapter。 我为我用作键的所有类都有XmlAdapters。当我独立编组这些类时,它们可以很好地工作,但是当我编组地图时,键被忽略了。我得到的是以下XML:
<entry>
<key/>
<value>
<id>1</id>
<property>something</property>
</value>
</entry>
我想要的是:
<entry>
<key>
<property>something</property>
</key>
<value>
<id>1</id>
<property>something</property>
</value>
</entry>
有没有办法在不为每张地图编写自定义XmlAdapter的情况下获得所需的结果?
答案 0 :(得分:0)
您无需使用JAXB和java.util.Map
做任何特别的事情。我将在下面举例说明。
<强>富强>
import java.util.*;
import javax.xml.bind.annotation.*;
@XmlRootElement
public class Foo {
private Map<Bar, Bar> bars = new HashMap<Bar, Bar>();
public Map<Bar, Bar> getBars() {
return bars;
}
public void setBars(Map<Bar, Bar> bars) {
this.bars = bars;
}
}
<强>酒吧强>
public class Bar {
private String baz;
public String getBaz() {
return baz;
}
public void setBaz(String baz) {
this.baz = baz;
}
}
<强>演示强>
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Foo.class);
Foo foo = new Foo();
Bar bar1 = new Bar();
bar1.setBaz("Hello");
Bar bar2 = new Bar();
bar2.setBaz("World");
foo.getBars().put(bar1, bar2);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(foo, System.out);
}
}
<强>输出强>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<foo>
<bars>
<entry>
<key>
<baz>Hello</baz>
</key>
<value>
<baz>World</baz>
</value>
</entry>
</bars>
</foo>
我在博客上写了更多关于JAXB和java.util.Map
的文章: