@XmlElement 注释是否应该强制映射一个字段,因为它是一个公共字段?
也就是领域:
public HashMap<String, String> myMap = new HashMap<String, String>();
得到映射确定。
不管网络上关于 mappingMap
的说法如何,当我 Marshall 我的班级时,这会产生一个很好的结果:
<myMap>
<entry>
<key>cat</key> <value>meows</value>
</entry>
<entry>
<key>dog</key> <value>barks</value>
</entry>
</myMap>
但是如果我添加了第二个相同的字段,但是因为它是私有的,所以为了被映射,注释为@XmlElement
:
@XmlElement
private HashMap<String, String> myMap2 = new HashMap<String, String>();
它不再起作用,即它产生一个空元素:
<myMap2/>
所以@XmlElement 不只是“打开”映射。好吧,它适用于简单类型的字段,甚至适用于列表,但不适用于地图。
问题是:这是对@XmlElement 的错误(幼稚)解释吗?有没有办法在不开发适配器的情况下完成 JAXB 已经为公共 Map 字段所做的事情?
这应该足够了,以防万一我在这里粘贴了完整但最小的源代码:
@XmlRootElement
public class K {
public HashMap<String, String> myMap = new HashMap<String, String>();
@XmlElement
private HashMap<String, String> myMap2 = new HashMap<String, String>();
//An Array list that yet gets correctly mapped
@XmlElement
private ArrayList<String> myList = new ArrayList<String>();
public static void main (String [] args) throws JAXBException {
K k = new K();
k.myMap.put("dog", "barks");
k.myMap.put("cat", "meows");
k.myMap2.put("bird", "tweets");
k.myMap2.put("snake", "rattles");
k.myList.add("first");
k.myList.add("second");
k.save();
}
public void save() throws JAXBException {
JAXBContext jaxbContext = JAXBContext.newInstance(K.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
marshaller.marshal(this, new File("K.xml"));
}
}
生成的 XML,我在周围添加了空行来显示它。
<k>
<myMap>
<entry>
<key>cat</key>
<value>meows</value>
</entry>
<entry>
<key>dog</key>
<value>barks</value>
</entry>
</myMap>
<myMap2/>
<myList>first</myList>
<myList>second</myList>