1.当返回值为map时候java
须要加注解: 转换成List<T>,数据,而且Key值插入到T的属性中!程序员
Mapdapter.class |
package com.java1234.adapter; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.xml.bind.annotation.adapters.XmlAdapter; import com.java1234.entity.MyRole; import com.java1234.entity.Role; public class MapAdapter extends XmlAdapter<MyRole[], Map<String,List<Role>>>{ /** * 适配转换 MyRole[] -> Map<String, List<Role>> */ @Override public Map<String, List<Role>> unmarshal(MyRole[] v) throws Exception { Map<String, List<Role>> map=new HashMap<String,List<Role>>(); for(int i=0;i<v.length;i++){ MyRole r=v[i]; map.put(r.getKey(), r.getValue()); } return map; } /** * 适配转换 Map<String, List<Role>> -> MyRole[] */ @Override public MyRole[] marshal(Map<String, List<Role>> v) throws Exception { MyRole[] roles=new MyRole[v.size()]; int i=0; for(String key:v.keySet()){ roles[i]=new MyRole(); roles[i].setKey(key); roles[i].setValue(v.get(key)); i++; } return roles; } } myRoleweb package com.java1234.entity; import java.util.List; /** * 自定义实体 cxf能接受 * @author Administrator * */ public class MyRole { private String key; private List<Role> value; public String getKey() { return key; } public void setKey(String key) { this.key = key; } public List<Role> getValue() { return value; } public void setValue(List<Role> value) { this.value = value; } }
|
client 调用的方法是:数组
package com.java1234.webservice; import java.util.List; public class Client { public static void main(String[] args) { HelloWorldService service=new HelloWorldService(); HelloWorld helloWorld=service.getHelloWorldPort(); /* *数据只能传输List<T>,不能传输map,因此map的key放入T中,即可以轻松传输! */ MyRoleArray arry = helloWorld.getRoles(); List<MyRole> roleList= arry.item; for(int i=0; i<roleList.size();i++){ MyRole my=roleList.get(i); System.out.println(my.key+":"); for(Role r:my.value){ System.out.println(r.getId()+","+r.getRoleName()); } System.out.println("========================"); } } }
实现的代码是:架构
/** * 注意 cfx 不支持map,因此须要将map的key和value转换为bean,以数组存储!传输! */ public Map<String, List<Role>> getRoles() { Map<String,List<Role>> map=new HashMap<String,List<Role>>(); List<Role> roleList1=new ArrayList<Role>(); roleList1.add(new Role(1,"技术总监")); roleList1.add(new Role(2,"架构师")); map.put("java1234", roleList1); List<Role> roleList2=new ArrayList<Role>(); roleList2.add(new Role(3,"程序员")); map.put("jack", roleList2); return map; }
运行结果shi:ide
jack: 3,程序员 ======================== java1234: 1,技术总监 2,架构师 ======================== |