java1234 webservice 第2 课 map等其他数据传输

本文介绍了一种解决Java Web服务中使用Map类型的问题的方法,通过自定义适配器将Map转换为数组形式,以便于在网络间传输。

1.当返回值为map时候

112136_qxI0_1760858.png

需要加注解: 转换成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;
	}

}

myRole

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:

jack:
3,程序员
========================
java1234:
1,技术总监
2,架构师
========================
 

 

转载于:https://my.oschina.net/u/1760858/blog/725529

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值