webservice返回值为Map类型的处理方法
在写一个webservice的时候,方法的返回值是一个复杂类型,处理方法是写一个结果类(Javabean)作为返回值。想着webservice方法返回值为Map的没写过,然后就试着写了一个简单的Demo。出错了...那我就来劲了,总有办法解决吧....

通过百度(你有Google癖好就用Google吧)。。找到方法,通过前辈们的经验找到解决方法。
业内人士都懂!注重版权,奉上原文链接:
http://blog.csdn.net/jspamd/article/details/8914427
贴上自个Demo代码之前,补充个知识点,webservice中发布方法的参数以及返回值可以很好的处理基本类型,POJO类,数组,以及list集合等复杂类型,但是在处理Map,非JavaBean式的类,我们需要自定义一个转换器,负责将webservice中不能处理的类型转换为可以处理的类型
(1)需要使用注解@XmlJavaTypeAdapter修饰返回类型
@WebService
public interface HelloService {
public String sayHello(String name);
public String sayGoodBy(String name);
public String sayHello2(String name); public @XmlJavaTypeAdapter((XmlMapAdapter.class)) Map<String, String> getSpace(String name);
}
(2)自定义一个可以替代不可处理参数类型的类(可以理解为模拟Map接口的类,这个类是POJO)
public class MyStringMap {
private List<Entry> entries;
/**
* @return entries
*/
public List<Entry> getEntries() {
return entries;
}
/**
* @param entries the entries to set
*/
public void setEntries(List<Entry> entries) {
this.entries = entries;
}
public static class Entry {
private String key;
private String value;
/**
* @return key
*/
public String getKey() {
return key;
}
/**
* @param key the key to set
*/
public void setKey(String key) {
this.key = key;
}
/**
* @return value
*/
public String getValue() {
return value;
}
/**
* @param value the value to set
*/
public void setValue(String value) {
this.value = value;
}
}
}
(3)自定义一个转换器(作为@XmlJavaTypeAdapter注解中value)
public class XmlMapAdapter extends XmlAdapter<MyStringMap, Map<String, String>>{
@Override
//Map(不可处理)转换为可处理的类(自定义的POJO类,就是模拟Map的一个类)
public MyStringMap marshal(Map<String, String> v) throws Exception {
MyStringMap result = new MyStringMap();
List<pojo.MyStringMap.Entry> entries = new ArrayList<MyStringMap.Entry>();
for(Entry<String, String> e : v.entrySet()){
pojo.MyStringMap.Entry entry = new pojo.MyStringMap.Entry();
entry.setKey(e.getKey());
entry.setValue(e.getValue());
entries.add(entry);
}
result.setEntries(entries);
return result;
}
//自定义可处理类转换为Map(不可处理的类型)
@Override
public Map<String, String> unmarshal(MyStringMap v) throws Exception {
Map<String, String> result = new HashMap<String, String>();
for(pojo.MyStringMap.Entry e : v.getEntries()){
result.put(e.getKey(), e.getValue());
}
return result;
}
}
(4)接口的实现类
@WebService(endpointInterface="com.webservice.HelloService",serviceName="MyService",targetNamespace="http://www.baidu.com")
public class HelloServiceImpl implements HelloService { @WebMethod(operationName="AliassayHello")
@WebResult(name="myReturn")
@Override
public String sayHello(@WebParam(name="name")String name) {
System.out.println("Hello,"+name);
return "Hello,"+name;
} @Override
public String sayGoodBy(@WebParam(name="name")String name) {
System.out.println("GoodBy,"+name);
return "GoodBy,"+name;
} @WebMethod(exclude=true)//不会被发布出去
@Override
public String sayHello2(String name) {
System.out.println("hello2"+ name);
return "Hello2,"+name;
} @Override
public Map<String, String> getSpace(String name) {
HashMap<String, String> resultMap = new HashMap<String,String>(); resultMap.put("age", "12");
resultMap.put("name", name);
resultMap.put("orid", "123123");
resultMap.put("address", "北京"); System.out.println(resultMap);
return resultMap;
} public static void main(String[] args) {
Endpoint.publish("http://127.0.0.1:8099/hello", new HelloServiceImpl());
System.out.println("服务发布成功!");
} }
剩下的就是测试工作,这里就没写客户端程序去测试了,使用SoapUI测试下
soap请求消息:

soap响应

个人理解webservice中的转换器的思想机制和struts2 中的类型转换机制是一个样的。
朋友,看我这么帅,点个赞呗
webservice返回值为Map类型的处理方法的更多相关文章
- 使用MyBatis时接收值和返回值选择Map类型或者实体类型
MyBatis作为现近JavaEE企业级项目开发中常用的持久层框架之一,以其简洁高效的ORM映射和高度的SQL的自由性被广大开发人员认可.Mybatis在接收系统传来的参数和返回的参数时主要可以有Ma ...
- SpringMVC Controller 返回值几种类型
SpringMVC Controller 返回值几种类型 2016年06月21日 19:31:14 为who而生 阅读数:4189 标签: Controller 返回值类型spring mvc 更多 ...
- mybatis Mapper 中resultType使用方法及返回值为Map的写法
mybatis学习(七)——resultType解析 resultType是sql映射文件中定义返回值类型,返回值有基本类型,对象类型,List类型,Map类型等.现总结一下再解释 总结: resul ...
- Spring MVC--------处理方法返回值的可选类型
对于Spring MVC处理方法支持支持一系列的返回方式: (1)ModelAndView (2)Model (3)ModelMap (4)Map (5)View (6)String (7)Void ...
- Swift2.0语言教程之函数的返回值与函数类型
Swift2.0语言教程之函数的返回值与函数类型 Swift2.0中函数的返回值 根据是否具有返回值,函数可以分为无返回值函数和有返回值函数.以下将会对这两种函数类型进行讲解. Swift2.0中具有 ...
- C语言函数返回值和变量类型
前言 最近在刷题,在写矩阵的快速幂的题时,对于返回值是数组的程序,写的十分冗杂.借此机会,重新梳理下C语言中函数的返回值与变量类型的关系. 按照变量的寿命,可以分为三种类型 1.静态变量 寿命从程序开 ...
- Mybaits查询返回值是List类型的
查询返回值是list类型的 1 首先在接口中写方法 public interface EmployeeMapper { public List<Employee> getEmpsByLas ...
- Mybatis select返回值为map时,选取表字段的两列作为key,value
项目需要从ibatis升级到MyBatis,dao中有一个方法返回Map类型,具体是查询语句查询两个字段,将结果列表字段A的值作为key字段B的值作为value存入Map中作为结果返回: ibatis ...
- SpringMVC Controller 返回值的可选类型
spring mvc 支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void. ModelAndView @RequestMap ...
随机推荐
- 北京电子科技学院(BESTI)实验报告4
北京电子科技学院(BESTI)实验报告4 课程: 信息安全系统设计基础 班级:1452.1453 姓名:(按贡献大小排名)周恩德 .郑凯杰 学号:(按贡献大小排名)20145217 .201453 指 ...
- React-webpack开发需要的那些坑
nvariant Violation: _registerComponent(...): Target container is not a DOM element. 就是一个找不到DOM节点的问题, ...
- 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP
[BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...
- phpcms文章点击量统计方法
phpcms用户广大,很好用,很傻瓜.设计思路也很好,对cms的常见功能都有设计,可以作为自己开发的参考. 最近看了下phpcms的源码关于文章点击量统计的这块,自己记录下. 默认文章点击量显示的位置 ...
- linux菜鸟日记(5)
iptables详细语法及配置: SNAT:源地址转换DNAT:目标地址转换PNAT:端口地址转换 ----------------------------------iptables规则链 路由以后 ...
- db2基础
DB2知识文档 一.db2 基础 基本语法 注释:"--"(两个减号) 字符串连接:"||" 如set msg='aaaa'||'bbbb',则msg为'aaa ...
- 应用TortoiseGit为github账号添加SSH keys
每次同步或者上传代码到githun上的代码库时,需要每次都输入用户名和密码,这时我们设置一下SSH key就可以省去这些麻烦了.若果使用TortoiseGit作为github本地管理工具,Tortoi ...
- Linux Shell 通配符、元字符、转义符【转帖】
作者:程默 说到shell通配符(wildcard),大家在使用时候会经常用到.下面是一个实例: 1 1 2 3 4 [chengmo@localhost ~/shell]$ ls a.txt ...
- PL/SQL Developer如何连接64位的Oracle图解
在64位Win7系统上安装64位的Oracle数据库,但是没有对应的64位PL/SQL Developer,此时就不能使用PL/SQL Developer来进行直接连接的,所以要想实现连接还得需要其他 ...
- angularJS 杂
慎用ng-repeat 中的 $index http://web.jobbole.com/82470/ 服务provider,公共代码的抽象 (语法糖)分为: constant常量:constant初 ...