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修饰返回类型
1 @WebService 2 public interface HelloService { 3 public String sayHello(String name); 4 public String sayGoodBy(String name); 5 public String sayHello2(String name); 6 7 public @XmlJavaTypeAdapter((XmlMapAdapter.class)) Map<String, String> getSpace(String name); 8 }
(2)自定义一个可以替代不可处理参数类型的类(可以理解为模拟Map接口的类,这个类是POJO)
1 public class MyStringMap { 2 private List<Entry> entries; 3 4 /** 5 * @return entries 6 */ 7 public List<Entry> getEntries() { 8 return entries; 9 } 10 11 /** 12 * @param entries the entries to set 13 */ 14 public void setEntries(List<Entry> entries) { 15 this.entries = entries; 16 } 17 18 public static class Entry { 19 private String key; 20 private String value; 21 /** 22 * @return key 23 */ 24 public String getKey() { 25 return key; 26 } 27 /** 28 * @param key the key to set 29 */ 30 public void setKey(String key) { 31 this.key = key; 32 } 33 /** 34 * @return value 35 */ 36 public String getValue() { 37 return value; 38 } 39 /** 40 * @param value the value to set 41 */ 42 public void setValue(String value) { 43 this.value = value; 44 } 45 46 } 47 }
(3)自定义一个转换器(作为@XmlJavaTypeAdapter注解中value)
1 public class XmlMapAdapter extends XmlAdapter<MyStringMap, Map<String, String>>{ 2 @Override 3 //Map(不可处理)转换为可处理的类(自定义的POJO类,就是模拟Map的一个类) 4 public MyStringMap marshal(Map<String, String> v) throws Exception { 5 MyStringMap result = new MyStringMap(); 6 List<pojo.MyStringMap.Entry> entries = new ArrayList<MyStringMap.Entry>(); 7 for(Entry<String, String> e : v.entrySet()){ 8 pojo.MyStringMap.Entry entry = new pojo.MyStringMap.Entry(); 9 entry.setKey(e.getKey()); 10 entry.setValue(e.getValue()); 11 entries.add(entry); 12 } 13 result.setEntries(entries); 14 return result; 15 16 } 17 //自定义可处理类转换为Map(不可处理的类型) 18 @Override 19 public Map<String, String> unmarshal(MyStringMap v) throws Exception { 20 Map<String, String> result = new HashMap<String, String>(); 21 for(pojo.MyStringMap.Entry e : v.getEntries()){ 22 result.put(e.getKey(), e.getValue()); 23 } 24 return result; 25 } 26 }
(4)接口的实现类
1 @WebService(endpointInterface="com.webservice.HelloService",serviceName="MyService",targetNamespace="http://www.baidu.com") 2 public class HelloServiceImpl implements HelloService { 3 4 @WebMethod(operationName="AliassayHello") 5 @WebResult(name="myReturn") 6 @Override 7 public String sayHello(@WebParam(name="name")String name) { 8 System.out.println("Hello,"+name); 9 return "Hello,"+name; 10 } 11 12 @Override 13 public String sayGoodBy(@WebParam(name="name")String name) { 14 System.out.println("GoodBy,"+name); 15 return "GoodBy,"+name; 16 } 17 18 @WebMethod(exclude=true)//不会被发布出去 19 @Override 20 public String sayHello2(String name) { 21 System.out.println("hello2"+ name); 22 return "Hello2,"+name; 23 } 24 25 @Override 26 public Map<String, String> getSpace(String name) { 27 HashMap<String, String> resultMap = new HashMap<String,String>(); 28 29 resultMap.put("age", "12"); 30 resultMap.put("name", name); 31 resultMap.put("orid", "123123"); 32 resultMap.put("address", "北京"); 33 34 System.out.println(resultMap); 35 return resultMap; 36 } 37 38 public static void main(String[] args) { 39 Endpoint.publish("http://127.0.0.1:8099/hello", new HelloServiceImpl()); 40 System.out.println("服务发布成功!"); 41 } 42 43 }
剩下的就是测试工作,这里就没写客户端程序去测试了,使用SoapUI测试下
soap请求消息:
soap响应
个人理解webservice中的转换器的思想机制和struts2 中的类型转换机制是一个样的。
朋友,看我这么帅,点个赞呗
转载于:https://www.cnblogs.com/xiaojianfeng/p/6078195.html
webservice返回值为Map类型的处理方法相关推荐
- mysql mybatis 返回值类型_使用MyBatis时接收值和返回值选择Map类型或者实体类型
MyBatis作为现近JavaEE企业级项目开发中常用的持久层框架之一,以其简洁高效的ORM映射和高度的SQL的自由性被广大开发人员认可.Mybatis在接收系统传来的参数和返回的参数时主要可以有Ma ...
- Swift2.0语言教程之函数的返回值与函数类型
Swift2.0语言教程之函数的返回值与函数类型 Swift2.0中函数的返回值 根据是否具有返回值,函数可以分为无返回值函数和有返回值函数.以下将会对这两种函数类型进行讲解. Swift2.0中具有 ...
- C++中函数模板的返回值是模板类型参数的调用方法
1 函数模板 模板定义以关键字template开始,后接模板形参表,模板形参表是用尖括号扩住的一个或多个模板形参的列表,形参之间以逗号分隔.关于函数模板的详细介绍,请参考<C++中模板函数及模板 ...
- SpringMVC的返回值和参数类型
传统的基于Spring Framework的web开发需要大量的 xml 配置,在有SpringBoot以后,Web开发的效 率得到了很大的提升,几乎大部分配置可以使用默认约定的规则.我们基于Spri ...
- SpringMVC——处理方法返回值的可选类型
spring mvc处理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void.下面将对具体的一一进行说明: 一.Model ...
- SpringMVC Controller 返回值的可选类型
原文地址:http://www.cnblogs.com/xiepeixing/p/4243801.html 感谢原作者! spring mvc 支持如下的返回方式:ModelAndView, Mod ...
- Python 函数参数有冒号 声明后有- 箭头 返回值注释 参数类型注释
在python3.7 环境下 函数声明时能在参数后加冒号,如图: 1 def f(ham: str, eggs: str = 'eggs') -> str : 2 print("Ann ...
- python函数返回多个值时的数据类型是_Python3 注释多个返回值的函数类型
场景 这要是讲函数注释的用法 没有返回值 def function(ver: str): print(var) 单个返回值 def function(ver: str) -> dict: a=[ ...
- python冒号声明类型_Python 函数参数有冒号 声明后有- 箭头 返回值注释 参数类型注释...
在python3.7 环境下 函数声明时能在参数后加冒号,如图: 1 def f(ham: str, eggs: str = 'eggs') -> str : 2 print("Ann ...
最新文章
- 集中配置管理工具puppet安装使用
- 英语发音表及读法_在英语中年月日的读法和写法(附:英美时间表达差异辨析)...
- 分享一套基于SpringBoot和Vue的企业级中后台开源项目,这个项目有点哇塞!
- JS面向对象的程序设计之继承-继承的实现-借用构造函数
- java并发包系列---LockSupport
- AutoFac+MVC+WebApi源码----我踩过的坑
- ABAP操作Excel(转)
- Map 3D API二次开发学习指南
- 金税盘组件接口调用方法
- 一个函数能否被两个线程同时调用
- Java高级工程师必备知识!kafka消费topic命令
- [Git命令]上传单个文件到GitHub项目已有文件夹
- 用python实现相声、评书自动下载(一)
- 眼见不一定为实!18个神奇的视错觉,看完不相信眼睛系列
- KEPServerEX助力能源巨擎实现工业4.0
- 微信群视频代理服务器,在微信群里发大于20M的视频,方法竟然这么简单
- 如何阻止浏览器的默认行为?
- 下载YouTube视频的一种方法
- oracle linux i386,在CentOS 5.5 i386 上安装 Oracle 10G XE
- 延伸产业链推进水稻循环经济 国稻种芯集团谋定益海嘉里合作
热门文章
- 惯性测量单元预积分原理与实现
- 一文读懂 12种卷积方法(含1x1卷积、转置卷积和深度可分离卷积等)
- 岳飞诗词集萃[zz]
- 怎样降低计算机屏幕亮度,如何调低电脑屏幕亮度【解决步骤】
- python+ opencv实现摄像头实时人脸识别并实现汉字标框
- js基础--数据类型
- 创建自己的RSS服务——debian docker TinyTinyRSS搭建
- mysql仿网易评论_Android仿抖音评论列表(加评论功能)/网易云音乐列表
- Like What You Like: Knowledge Distill via Neuron Selectivity Transfer 论文翻译
- 计算机网络面试常见知识点(含HTTPS和TLS)