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,架構師 ======================== |