Java 使用JAXB进行自定义地图解组
我有一个XML,其中包含如下序列化的地图:Java 使用JAXB进行自定义地图解组,java,xml,jaxb,Java,Xml,Jaxb,我有一个XML,其中包含如下序列化的地图: <system> ... <entities> <entity> <string>key<string> <string><![CDATA[["a", "b", "c"]]]></string> </entity> ... </entities> </system>
<system>
...
<entities>
<entity>
<string>key<string>
<string><![CDATA[["a", "b", "c"]]]></string>
</entity>
...
</entities>
</system>
所以问题是如何使它与JAXB一起工作?您必须使用XmlAdapter和@XmlJavaTypeAdapter注释 步骤1:创建一个表示
元素的类实体,并将其映射到JAXB
第2步:创建一个扩展
XMLAdapter的类谢谢,我唯一不能理解的问题是,它不是一个XmlRootElement,而是一个更大对象的成员。我会更新我原来的问题。我更新了答案,它解决了你的问题吗?谢谢,它没有直接解决,但你确实帮助我走上了正确的道路。JAXB不喜欢在同一个属性上使用\@XmlElementWrapper和\@XmlJavaTypeAdapter。我必须为集合创建另一个实体。奇怪的是,包装器和适配器不能一起工作,我会研究它。无论如何,我更新了你可能使用的答案。如果答案正确,你能接受吗?谢谢。请注意,规范允许使用\@XmlElementWrapper和\@XmlJavaTypeAdapter,但JAXB中目前存在一个bug,阻止我们这样做:
class System {
...
private Map<String, Object> properties;
}
@XmlRootElement
@XmlSeeAlso({Entity.class})
@XmlAccessorType(XmlAccessType.FIELD)
public class Entities{
@XmlElement(name="entity")
@XmlJavaTypeAdapter(YourAdapter.class)
private Map<String,Object> yourMap;
//getters, setters, and methods
}
class ParentElement{
//Other fields
@XmlElement(name="entities")
private Entities entities;
//Getters, Setters, Methods
}
@XmlSeeAlso({Entity.class})
public class Entities{
@XmlElement(name="entity")
@XmlJavaTypeAdapter(YourAdapter.class)
private Map<String,Object> yourMap;
//getters, setters, and methods
}