Java|WebService小白学习 之 处理一些Map等复杂类型 (5)

上篇 WebService小白学习 之 处理JavaBean以及复合类型,list
【Java|WebService小白学习 之 处理一些Map等复杂类型 (5)】该篇为CXF处理一些Map等复杂类型的方法。
实现过程:
1、在服务端项目IHelloWorld.java添加方法声明getRoles();

package com.gx.webservice; import java.util.List; import java.util.Map; import javax.jws.WebService; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import com.gx.adapter.MapAdapter; import com.gx.entity.Role; import com.gx.entity.User; @WebService public interface IHelloWorld { public String say(String str); public List getRoleByUser(User user); //通过用户获取角色 @XmlJavaTypeAdapter(MapAdapter.class) public Map> getRoles(); //获取所有用户以及对应的角色}

2、在服务端项目创建com.gx.adapter包,创建MapAdapter.java
package com.gx.adapter; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.xml.bind.annotation.adapters.XmlAdapter; import com.gx.entity.MyRole; import com.gx.entity.Role; /** * 适配器 * @ClassName: MapAdapter * @Description: 适配转换 * @author zhoujie * @date 2018年7月27日 下午7:58:46 * @version V1.0 */ public class MapAdapter extends XmlAdapter>{ /** * 适配转换 MyRole[] -> Map> */ @Override public Map> unmarshal(MyRole[] v) throws Exception { Map> map = new HashMap<>(); for (int i = 0; i < v.length; i++) { MyRole r = v[i]; map.put(r.getKey(), r.getValue()); } return null; } /** * 适配转换Map> ->MyRole[] */ @Override public MyRole[] marshal(Map> 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; }}

3、在服务端项目创建com.gx.entity包,创建MyRole.java
package com.gx.entity; import java.util.List; /** * * @ClassName: MyRole * @Description: map适配器--自定义实体 * @author zhoujie * @date 2018年7月27日 下午7:50:17 * @version V1.0 */ public class MyRole { private String key; //相当于map的key private List value; //相当于map的value public String getKey() { return key; } public void setKey(String key) { this.key = key; } public List getValue() { return value; } public void setValue(List value) { this.value = https://www.it610.com/article/value; } }

4、在服务端项目HelloWorldImpl.java添加方法实现getRoles();
package com.gx.webservice.impl; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.jws.WebService; import com.gx.entity.Role; import com.gx.entity.User; import com.gx.webservice.IHelloWorld; @WebService public class HelloWorldImpl implements IHelloWorld{ public String say(String str) { return "hello "+str; } @Override public List getRoleByUser(User user) { //模拟 数据 List rolelist = new ArrayList<>(); if(user!=null){ if(user.getUsername().equals("sa") && user.getPassword().equals("123")){ rolelist.add(new Role(1, "技术总监")); rolelist.add(new Role(2, "架构师")); }else if(user.getUsername().equals("zj") && user.getPassword().equals("123")){ rolelist.add(new Role(3, "程序员")); } } return rolelist; } @Override public Map> getRoles() { //模拟 数据 Map> map = new HashMap<>(); List rolelist = new ArrayList<>(); rolelist.add(new Role(1, "技术总监")); rolelist.add(new Role(2, "架构师")); map.put("sa", rolelist); List rolelist2 = new ArrayList<>(); rolelist2.add(new Role(3, "程序员")); map.put("zj", rolelist2); return map; }}

5、客户端项目重新使用cxf工具生成文件,忘记请看这里
6、客户端测试Client.java
package com.gx.webservice; import java.util.List; public class Client { public static void main(String[] args) {IHelloWorldService service = new IHelloWorldService(); IHelloWorld helloworld = service.getIHelloWorldPort(); //System.out.println(helloworld.say("zj")); /*User user = new User(); user.setUsername("sa"); user.setPassword("123"); List rolelist = helloworld.getRoleByUser(user); for (Role role : rolelist) { System.out.println(role.getId()+","+role.getRoleName()); }*/MyRoleArray array = helloworld.getRoles(); List roleList = array.item; for (MyRole myRole : roleList) { System.out.print(myRole.key+":"); for (Role role : myRole.value) { System.out.print(role.getId()+","+role.getRoleName()); } System.out.println("================="); } } }

结果:
Java|WebService小白学习 之 处理一些Map等复杂类型 (5)
文章图片

下篇
WebService小白学习 之 CXF添加拦截器,自定义拦截器

    推荐阅读