上篇 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("=================");
} }
}
结果:
文章图片
下篇
WebService小白学习 之 CXF添加拦截器,自定义拦截器
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)