RestEasy Web服务客户端调用

简介:

l 背景

在前几篇文章中,我介绍了用RestEasy 框架搭建的Rest风格的java web服务。这几天事情比较多,一直没有写客户端的调用方法。现在就谈一下客户端的调用方法。

首先,如果你还不知道如何利用RestEasy 构建Rest风格的Web服务。请查看与web服务相关的概念以及如何利用RestEasy搭建webservice的文章。

l 编码测试

本来想用Android做个客户端,然后将测试代码写在android应用程序中。结果发现我将搭载有webservice的gae运行起来之后,利用http://ip:port不能在Android客户单中访问。令人郁闷。浏览器中输入http://localhost:port 居然没有问题,可以正常调用使用。我想肯定在Android中是无法解析localhost.自然无响应。我试图利用本机ip问。结果以在GAE平台上,run之后,只能用http://localhost:port访问,使用ip连不上,我狠郁闷。

到最后,不得不写了几个测试用例。

如果你还不知道如何在GAE中搭建单元测试,可以看该文章。http://blog.csdn.net/nndtdx/article/details/6767352

下面是代码,这里主要测试两个方法,一个是listallbook即get方式提交,另外一个是addbook使用post提交。方法如下

 

 

 
  1. import org.apache.http.HttpEntity; 
  2. import org.apache.http.HttpResponse; 
  3. import org.junit.After; 
  4. import org.junit.AfterClass; 
  5. import org.junit.Before; 
  6. import org.junit.BeforeClass; 
  7. import org.junit.Test; 
  8. import org.junit.Assert; 
  9. import org.junit.internal.runners.statements.Fail; 
  10. import org.apache.http.client.HttpClient; 
  11. import org.apache.http.client.methods.HttpGet; 
  12. import org.apache.http.client.methods.HttpPost; 
  13. import org.apache.http.impl.client.DefaultHttpClient; 
  14. import org.apache.http.util.EntityUtils; 
  15. import org.apache.http.message.BasicNameValuePair; 
  16. import org.apache.http.protocol.HTTP; 
  17. import org.apache.http.NameValuePair; 
  18. import org.apache.http.client.entity.UrlEncodedFormEntity; 
  19. import java.util.*; 

 

 
  1. String urlRoot = "http://localhost:8888/gaerest/"
  2.  
  3.  
  4. @Test 
  5. public void listBooksTest() { 
  6.  
  7.     HttpClient httpClient = new DefaultHttpClient(); 
  8.     String urllistallbook = urlRoot + "library/books/"
  9.  
  10.     HttpGet httpGet = new HttpGet(urllistallbook); 
  11.     try { 
  12.         HttpResponse response = new DefaultHttpClient().execute(httpGet); 
  13.         int code = response.getStatusLine().getStatusCode(); 
  14.         //204服务器已经处理成功,但没有返回任何数据 
  15.         if (code == 200 || code==204) { 
  16.             String content = EntityUtils.toString(response.getEntity()); 
  17.             System.out.println("listaoobook输出===>" + content); 
  18.         } else { 
  19.             System.err.println("建立请求失败,返回状态码==》" + code); 
  20.             Assert.fail("listbooks"); 
  21.         } 
  22.  
  23.     } catch (Exception e) { 
  24.         // TODO: handle exception 
  25.         Assert.fail("listbooks失败" + e.getMessage()); 
  26.     } 
  27.  
  28.  
  29. @Test 
  30. public void  addBookTest() { 
  31.     HttpClient httpClient = new DefaultHttpClient(); 
  32.     String urlString=urlRoot+"library/book/mybook/"
  33.     HttpPost httpPost=new HttpPost(urlString); 
  34.     List<NameValuePair> params=new ArrayList<NameValuePair>(); 
  35.     params.add( new BasicNameValuePair("content""this is my book content")  ); 
  36.     try { 
  37.         UrlEncodedFormEntity entity=new UrlEncodedFormEntity(params,HTTP.UTF_8); 
  38.         httpPost.setEntity(entity); 
  39.         HttpResponse response=httpClient.execute(httpPost); 
  40.         int code= response.getStatusLine().getStatusCode(); 
  41.         if(code==200){ 
  42.             String reString=EntityUtils.toString(response.getEntity()); 
  43.             System.out.println(reString); 
  44.             this.listBooksTest(); 
  45.              
  46.         }else
  47.             Assert.fail("addbooktest===》"+code); 
  48.         } 
  49.            
  50.     } catch (Exception e) { 
  51.         Assert.fail("addbookTest"+e.getMessage()+e.getStackTrace()); 
  52.     } 

 

这里主要是用了Apache提供的几个类。构建不同的请求方式对象,然后调用HttpClient进行执行。不过需要注意,上边很多类在Android中也有提供相同的类,写的时候,注意选择是那个里边的类。

GET方式很好理解,就是请求一个url即可。Post方式只需要将数据放在请求实体中即可。

运行单元测试,完美通过。查看输出,可以看到列出的数目已经增加了,说明post方法没有问题。

接下来还要处理一个gae webservice如果在开发阶段,我如何将其发布到本地,使其通过本地ip在模拟器中可以访问呢?思考中。目前就先依赖单元测试吧。



本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/667513,如需转载请自行联系原作者

相关文章
|
3月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
|
5月前
|
中间件 Go
Golang | Gin:net/http与Gin启动web服务的简单比较
总的来说,`net/http`和 `Gin`都是优秀的库,它们各有优缺点。你应该根据你的需求和经验来选择最适合你的工具。希望这个比较可以帮助你做出决策。
207 35
|
7月前
|
数据采集 Web App开发 API
FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
本文介绍了如何使用FastAPI和Selenium搭建RESTful接口,访问免版权图片网站Pixabay并采集图片及其描述信息。通过配置代理IP、User-Agent和Cookie,提高爬虫的稳定性和防封禁能力。环境依赖包括FastAPI、Uvicorn和Selenium等库。代码示例展示了完整的实现过程,涵盖代理设置、浏览器模拟及数据提取,并提供了详细的中文注释。适用于需要高效、稳定的Web数据抓取服务的开发者。
348 15
FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
|
7月前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
191 20
|
7月前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
381 7
|
11月前
|
XML JSON 安全
Web服务是通过标准化的通信协议和数据格式
【10月更文挑战第18天】Web服务是通过标准化的通信协议和数据格式
303 69
|
7月前
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
161 0
|
10月前
|
Go UED
Go Web服务中如何优雅平滑重启?
在生产环境中,服务升级时如何确保不中断当前请求并应用新代码是一个挑战。本文介绍了如何使用 Go 语言的 `endless` 包实现服务的优雅重启,确保在不停止服务的情况下完成无缝升级。通过示例代码和测试步骤,详细展示了 `endless` 包的工作原理和实际应用。
207 3
|
10月前
|
JSON Go UED
Go Web服务中如何优雅关机?
在构建 Web 服务时,优雅关机是一个关键的技术点,它确保服务关闭时所有正在处理的请求都能顺利完成。本文通过一个简单的 Go 语言示例,展示了如何使用 Gin 框架实现优雅关机。通过捕获系统信号和使用 `http.Server` 的 `Shutdown` 方法,我们可以在服务关闭前等待所有请求处理完毕,从而提升用户体验,避免数据丢失或不一致。
145 1
|
11月前
|
XML JSON 安全
定义Web服务
【10月更文挑战第18天】定义Web服务
225 12

热门文章

最新文章