【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
遇到cxf自己不能处理的数据,如cxf不能自己处理Map对象,遇到这种情况需要开发工程师自己写代码处理
1.@XmlJavaTypeAdapter:该注解修饰不能处理的类型,该注解jDK自带的,通过value指定一个转换器:
//@XmlJavaTypeAdapter:该注解jDK自带的,通过value指定一个转换器
@XmlJavaTypeAdapter(value=FKXMLAdapter.class)Map<String, Cat> getAllCats();
FKXMLAdapter类是我们自己定义的.
Map<String, Cat>是cxf不能处理的类型.
2.FKXMLAdapter的代码如下
FKXMLAdapter继承XmlAdapter,用StringCat模拟Map<String, Cat>
/**
* @author xp
* @Title: FKXMLAdapter.java
* @Package com.xp.cn.ws.adapter
* @Description: TODO
* @date 2016年5月1日 下午5:56:56
* @version V1.0
*/
package com.xp.cn.ws.adapter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import com.xp.cn.bean.Cat;
import com.xp.cn.bean.StringCat;
import com.xp.cn.bean.StringCat.Entry;
/**
* @author xp
* @ClassName: FKXMLAdapter
* @Description: TODO
* @date 2016年5月1日 下午5:56:56
* ValueType:能解决的类型 自定义为StringCat
* BoundType:不能解决的类型 Map<String, Cat>
* 实现集成的方法达到StringCat,Map<String, Cat>之间的相互转换
*/
public class FKXMLAdapter extends XmlAdapter<StringCat, Map<String, Cat>>
{
@Override
public Map<String, Cat> unmarshal(StringCat v) throws Exception
{
Map<String, Cat> map = new HashMap<String, Cat>();
for (Entry entry : v.getEntries())
{
System.out.println(entry.getKey());
map.put(entry.getKey(), entry.getValue());
}
return map;
}
@Override
public StringCat marshal(Map<String, Cat> v) throws Exception
{
StringCat stringcat = new StringCat();
for (String key : v.keySet())
{
stringcat.getEntries().add(new Entry("", v.get(key)));
}
return stringcat;
}
}
3.StringCat的代码如下:
/**
* @author xp
* @Title: StringCat.java
* @Package com.xp.cn.ws.bean
* @Description: TODO
* @date 2016年5月1日 下午5:59:48
* @version V1.0
*/
package com.xp.cn.bean;
import java.util.ArrayList;
import java.util.List;
/**
* @author xp
* @ClassName: StringCat
* @Description: TODO
* @date 2016年5月1日 下午5:59:48
* Entry封装了Map信息
*/
public class StringCat
{
public static class Entry
{
private String key;
private Cat value;
public Entry() {
}
public Entry(String key, Cat value) {
this.key = key;
this.value = value;
}
public String getKey()
{
return key;
}
public void setKey(String key)
{
this.key = key;
}
public Cat getValue()
{
return value;
}
public void setValue(Cat value)
{
this.value = value;
}
}
private List<Entry> entries = new ArrayList<Entry>();
public List<Entry> getEntries()
{
return entries;
}
public void setEntries(List<Entry> entries)
{
this.entries = entries;
}
}
评论(1)