zoukankan      html  css  js  c++  java
  • WebService小白学习 之 处理一些Map等复杂类型 (5)

    上篇 WebService小白学习 之 处理JavaBean以及复合类型,list

    该篇为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<Role> getRoleByUser(User user);//通过用户获取角色
    	
    	@XmlJavaTypeAdapter(MapAdapter.class)
    	public Map<String, List<Role>> 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<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<>();
    		for (int i = 0; i < v.length; i++) {
    			MyRole r = v[i];
    			map.put(r.getKey(), r.getValue());
    		}
    		return null;
    	}
    
    	/**
    	 * 适配转换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;
    	}
    
    }
    

    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<Role> value; //相当于map的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;
    	}
    	
    }
    

    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<Role> getRoleByUser(User user) {
    		//模拟 数据
    		List<Role> 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<String, List<Role>> getRoles() {
    		//模拟 数据
    		Map<String, List<Role>> map = new HashMap<>();
    		List<Role> rolelist = new ArrayList<>();
    		rolelist.add(new Role(1, "技术总监"));
    		rolelist.add(new Role(2, "架构师"));
    		map.put("sa", rolelist);
    		List<Role> 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<Role> rolelist = helloworld.getRoleByUser(user);
    		for (Role role : rolelist) {
    			System.out.println(role.getId()+","+role.getRoleName());
    		}*/
    		
    		MyRoleArray array = helloworld.getRoles();
    		List<MyRole> 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("=================");
    		}
     		
    	}
    	
    }
    

    结果:

    下篇

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

  • 相关阅读:
    后端框架:SpringBoot+Mybatis+Dubbox(zookeeper+dubbo-admin)
    java代码执行mysql存储过程
    SpringBoot整合Junit
    摘要算法之MD5
    java如何控制下载的文件类型是txt还是doc?如何将文件名返回给前端?Content-disposition
    Android Atuido 连接模拟器
    verilog CRC 校验
    Altium Designer(AD软件)如何导出gerber文件
    SpringBoot集成mybatisplus
    C++ | 通过智能指针实现资源管理
  • 原文地址:https://www.cnblogs.com/qq1995/p/10358986.html
Copyright © 2011-2022 走看看