使用java XML注释JAXB将多个元素绑定到属性作为键的映射
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用java XML注释JAXB将多个元素绑定到属性作为键的映射,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2516字,纯文字阅读大概需要4分钟。
内容图文
![使用java XML注释JAXB将多个元素绑定到属性作为键的映射](/upload/InfoBanner/zyjiaocheng/721/fe2f21f59c0341af86336f3008e91ea1.jpg)
我有一个XML源代码,我使用JAXB解组对象.
XML源代码:
<album>
<name>something</name>
<id>003030</id>
<artist>someone</artist>
...
</album>
java源代码(与所需的getter / setter一样):
@XmlRootElement(name="album")
class Album {
String name;
Long id;
String artist;
...
}
到现在为止还挺好.现在我在专辑列表中获得了一些不同大小的图片网址:
...
<image size="small">http://.../small.jpg</image>
<image size="medium">http://.../medium.jpg</image>
<image size="large">http://.../large.jpg</image>
...
我想将它映射到这样的java Map:
Map<String,String> imageUrls;
地图的键是size属性,地图的值是元素值.
如果可能的话,我应该如何注释这个变量?
解决方法:
助手班对
@XmlAccessorType(XmlAccessType.FIELD)
public class Pair {
@XmlAttribute
private String key;
@XmlValue
private String value;
public Pair() {
}
public Pair(String key, String value) {
this.key = key;
this.value = value;
}
//... getters, setters
}
对列表
@XmlAccessorType(XmlAccessType.FIELD)
public class PairList
{
private List<Pair> values = new ArrayList<Pair>();
public PairList() {
}
//...
}
适配器
public class MapAdaptor extends XmlAdapter<PairList, Map<String, String>>
{
@Override
public Map<String, String> unmarshal(PairList list) throws Exception
{
Map<String, String> retVal = new HashMap<String, String>();
for (Pair keyValue : list.getValues())
{
retVal.put(keyValue.getKey(), keyValue.getValue());
}
return retVal;
}
@Override
public PairList marshal(Map<String, String> map) throws Exception
{
PairList retVal = new PairList();
for (String key : map.keySet())
{
retVal.getValues().add(new Pair(key, map.get(key)));
}
return retVal;
}
}
在您的实体中使用
@XmlJavaTypeAdapter(value = MapAdaptor.class)
private Map<String, String> imageUrls = new HashMap<String, String>();
PS
你可以使用Pair []代替PairList而不使用类PairList
适配器
public class MapAdaptor extends XmlAdapter<Pair[], Map<String, String>>
{
@Override
public Map<String, String> unmarshal(Pair[] list) throws Exception
{
Map<String, String> retVal = new HashMap<String, String>();
for (Pair keyValue : Arrays.asList(list))
{
retVal.put(keyValue.getKey(), keyValue.getValue());
}
return retVal;
}
@Override
public Pair[] marshal(Map<String, String> map) throws Exception
{
List<Pair> retVal = new ArrayList<Pair>();
for (String key : map.keySet())
{
retVal.add(new Pair(key, map.get(key)));
}
return retVal.toArray(new Pair[]{});
}
}
但在这种情况下,您无法控制每对的名称.它将是项目,你不能改变它
<item key="key2">valu2</item>
<item key="key1">valu1</item>
PS2
如果您尝试使用List< Pair>而不是PairList,你会得到异常
ERROR: java.util.List haven't no-arg constructor
内容总结
以上是互联网集市为您收集整理的使用java XML注释JAXB将多个元素绑定到属性作为键的映射全部内容,希望文章能够帮你解决使用java XML注释JAXB将多个元素绑定到属性作为键的映射所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。