Jersey 客户端 API 基础

jersey-1.14.jar 密码: cxug

要开始使用 Jersey 客户端 API,你首先需要创建一个 com.sun.jersey .api.client.Client 类的实例。下面是最简单的方法:

import com.sun.jersey .api.client.Client;
Client client = Client.create();

Client 类是创建一个 RESTful Web Service 客户端的主要配置点。你可以使用它来配置不同的客户端属性和功能,并且指出使用哪个资源提供者。创建一个 Client 类的实例是一个比较昂贵的操作,所以尽量避免创建一些不需要的客户端实例。比较好的方式是尽可能地复用已经存在的实例。

当你创建完一个 Client 类的实例后,你可以开始使用它。无论如何,在发出请求前,你需要创建一个 Web Resource 对象来封装客户端所需要的 Web 资源。

Web 资源创建了一个 WebResponse 对象:

import com.sun.jersey .api.client.WebResource;
Web Resource webResource = c.resource("http://example.com/base");

通过使用 WebResource 对象来创建要发送到 Web 资源的请求,以及处理从 Web 资源返回的响应。例如,你可以使用 WebResource 对象来发送 HTTP GET、PUT、POST 以及 DELETE 请求。

GET 请求:使用 WebResource 类的 get() 方法来提交一个 HTTP GET请求到 Web 资源:

String s = webResource.get(String.class);
    这表示如果 WebResource 对象的 URL 是 http://example.com/base,那么一个 HTTP GET 请求将会发送到地址为 http://example.com/base 的资源。

String s = webResource.get(String.class);
   你还可以指定 get() 请求时的查询参数。例如,下面的代码在 get() 请求中指定了两个查询参数:

MultivaluedMap queryParams = new MultivaluedMapImpl();
queryParams.add("param1", "val1");
queryParams.add("param2", "val2");
String s = webResouce.queryParams(queryParams).get(String.class);

你还可以指定响应所能接受的 MIME 类型。例如,下面的代码指定了响应的 MIME 类型只能为文本:

String s = webResource.accept("text/plain").get(String.class);

你还可以获取对应请求的 HTTP 状态码,例如下面这个例子展示获取一个请求所返回的文本实体与状态码:

ClientResponse response = webResource.accept("text/plain").get(ClientResponse.class);
int status = response.getStatus();
String textEntity = response.getEntity(String.class); 

ClientResponse 对象代表了一个客户端收到的 HTTP 响应。

PUT 请求 :使用 WebResource 类的 put() 方法来提交一个 HTTP PUT 请求到 Web 资源。例如下面的代码展示了请求发送一个文本实体 foo:bar 到指定的 Web 资源:

ClientResponse response = webResource.type("text/plain").put(ClientResponse.class, "foo:bar");    

同样,你也可以在使用 put() 方法发送请求时指定查询参数,方法与使用 get() 方法时指定查询参数一样。在下面的例子中,把在之前 get() 方法示例中使用过的两个同样的查询参数指定到了一个 put() 请求中:

MultivaluedMap queryParams = new MultivaluedMapImpl();
queryParams.add("param1", "val1");
queryParams.add("param2", "val2");
ClientResponse response = webResource.queryParams(queryParams).put(ClientResponse.class, "foo:bar");

POST 请求 :一个 POST 请求相当于一个 GET 请求和一个 PUT 请求的综合,也就意味着,你可以使用 POST 请求来发送一个实体到指定的 Web 资源并且接收另一个实体。使用 WebResource 类的 post() 方法来发送一个 HTTP POST 请求到指定的 Web 资源。下面的例子展示了发送一个带有查询参数以及进行了 URL 编码的表单数据的 POST 请求:

MultivaluedMap formData = new MultivaluedMapImpl();
formData.add("name1", "val1");
formData.add("name2", "val2");
ClientResponse response = webResource.type("application/x-www-form-urlencoded").post(ClientResponse.class, formData);

DELETE 请求:使用 Web Resource 类的 delete() 方法来发送珍上 HTTP DELETE 请求到指定的 Web 资源。例如,下面的例子展示删除一个 URI 为 http://example.com/base/user/123 资源:

ClientResponse response = webResource.path("user/123").delete(ClientResponse.class);

另外,Web Resource.path() 方法可以在所有 HTTP 请求中使用,它可以让你给要请求的 Web 资源指定一个额外的路径。另一个 WebResouce 类的方法 header() 可以给你的请求添加 HTTP 头部信息。

另外如果表单提交的话,需要new Form来作为参数提交。

一个基于 Jersey 客户端的示例

  1 import com.alibaba.fastjson.JSON;
  2 import com.alibaba.fastjson.JSONArray;
  3 import com.alibaba.fastjson.JSONObject;
  4 import com.rimi.medical.common.domain.ResultPojo;
  5 import com.sun.jersey.api.client.Client;
  6 import com.sun.jersey.api.client.ClientResponse;
  7 import com.sun.jersey.api.client.WebResource;
  8 import com.sun.jersey.core.util.MultivaluedMapImpl;
  9
 10 import javax.ws.rs.core.MediaType;
 11 import javax.ws.rs.core.MultivaluedMap;
 12 import java.util.ArrayList;
 13 import java.util.Iterator;
 14 import java.util.List;
 15 import java.util.Map;
 16
 17 /**
 18  * JerseyAPi客户端
 19  * Created by libt on 2015/01/30.
 20  */
 21 public class JerseyClientUtil {
 22
 23     private static final String BIGDATA_API_URL = ReadSettingProperties.getValue("bigdata_api_url");
 24
 25     /**
 26      * post方法
 27      *
 28      * @param method 方法名
 29      * @param param  参数
 30      * @return 返回值
 31      */
 32     public static ResultPojo postMethod(String method, String param) {
 33         ResultPojo resultPojo = new ResultPojo();
 34         ClientResponse response = null;
 35         try {
 36             Client client = Client.create();
 37             WebResource resource = client.resource(BIGDATA_API_URL + method);
 38             response = resource.type(MediaType.APPLICATION_JSON_TYPE).post(ClientResponse.class, param);
 39             int status = response.getStatus();
 40             String data = response.getEntity(String.class);
 41             if (status == 200) {
 42                 JSONObject jsonObject = JSON.parseObject(data);
 43                 resultPojo.setStatus(jsonObject.getInteger("status"));
 44                 resultPojo.setData(data);
 45             } else {
 46                 resultPojo.setStatus(response.getStatus());
 47                 resultPojo.setData(data);
 48             }
 49         } catch (Exception e) {
 50             resultPojo.setStatus(500);//服务器异常
 51             resultPojo.setErrorMsg(e.getMessage());
 52         } finally {
 53             if (response != null) {
 54                 response.close();
 55             }
 56         }
 57         return resultPojo;
 58     }
 59
 60
 61     /**
 62      * get方法
 63      * 例如:consultation/recommend?startDate=201412030253&endDate=201412020253
 64      * @param method 方法名
 65      * @param param  参数
 66      * @return 返回值
 67      */
 68     public static ResultPojo getMethod(String method, String param) {
 69         ResultPojo resultPojo = new ResultPojo();
 70         ClientResponse response = null;
 71         try {
 72             Client client = Client.create();
 73             WebResource resource = client.resource(BIGDATA_API_URL + method);
 74             response = resource.queryParams(parseJSON2Map(param)).accept(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class);
 75             int status = response.getStatus();
 76             String data = response.getEntity(String.class);
 77             if (status == 200) {
 78                 JSONObject jsonObject = JSON.parseObject(data);
 79                 resultPojo.setStatus(jsonObject.getInteger("status"));
 80                 resultPojo.setData(data);
 81             } else {
 82                 resultPojo.setStatus(response.getStatus());
 83                 resultPojo.setData(response.getEntity(String.class));
 84             }
 85         } catch (Exception e) {
 86             e.printStackTrace();
 87             resultPojo.setStatus(500);//服务器异常
 88             resultPojo.setErrorMsg(e.getMessage());
 89         } finally {
 90             if (response != null) {
 91                 response.close();
 92             }
 93         }
 94         return resultPojo;
 95     }
 96
 97     /**
 98      * get方法
 99      * 例如:consultation/recommend/A1000037B04B8C
100      * @param method 方法名
101      * @param param  参数
102      * @return 返回值
103      */
104     public static ResultPojo getMethodOnly(String method, String param) {
105         ResultPojo resultPojo = new ResultPojo();
106         ClientResponse response = null;
107         try {
108             Client client = Client.create();
109             WebResource resource = client.resource(BIGDATA_API_URL + method + param);
110             response = resource.accept(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class);
111             int status = response.getStatus();
112             String data = response.getEntity(String.class);
113             if (status == 200) {
114                 JSONObject jsonObject = JSON.parseObject(data);
115                 resultPojo.setStatus(jsonObject.getInteger("status"));
116                 resultPojo.setData(data);
117             } else {
118                 resultPojo.setStatus(response.getStatus());
119                 resultPojo.setData(response.getEntity(String.class));
120             }
121         } catch (Exception e) {
122             e.printStackTrace();
123             resultPojo.setStatus(500);//服务器异常
124             resultPojo.setErrorMsg(e.getMessage());
125         } finally {
126             if (response != null) {
127                 response.close();
128             }
129         }
130         return resultPojo;
131     }
132
133     public static MultivaluedMap parseJSON2Map(String jsonStr) {
134         MultivaluedMap queryParams = new MultivaluedMapImpl();
135         //最外层解析
136         JSONObject json = JSON.parseObject(jsonStr);
137         for (Map.Entry<String, Object> entry : json.entrySet()) {
138             Object v = entry.getValue();
139             //如果内层还是数组的话,继续解析
140             if (v instanceof JSONArray) {
141                 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
142                 Iterator<Object> it = ((JSONArray) v).iterator();
143                 while (it.hasNext()) {
144                     JSONObject json2 = (JSONObject) it.next();
145                     list.add(parseJSON2Map(json2.toJSONString()));
146                 }
147                 queryParams.add(entry.getKey(), list);
148             } else {
149                 queryParams.add(entry.getKey(), v);
150             }
151         }
167         return queryParams;
168     }
169
170
171     public static void main(String[] args) {
172
173 //        ResultPojo resultPojo = postMethod("bfr/bfr_choices", "{\"userid\":\"00004\",\"createTime\":\"2014-09-23 16:19:23\",\"bmiScore\":\"80\",\"imageNum\":\"01\",\"type\":\"0\",\" info \":\"个人身体质量分析正常\"}");
174         ResultPojo resultPojo = getMethod("recommendInfo/query", "{\"endDate\":\"201412020253\",\"startDate\":\"201410010253\"}");
175 //        ResultPojo resultPojo = getMethodOnly("consultation/recommend/", "A1000037B04B8C");
176         System.out.println(resultPojo.getStatus());
177         System.out.println(resultPojo.getErrorMsg());
178
179     }
180 }

转载于:https://www.cnblogs.com/libaoting/p/jersey.html

Jersey客户端API调用REST风格的Web服务相关推荐

  1. 通过 Jersey Http请求头,Http响应头,客户端 API 调用 REST 风格的 Web 服务

    原地址:http://blog.csdn.net/li575098618/article/details/47853263 Jersey 1.0 是一个开源的.可以用于生产环境的 JAX-RS(RES ...

  2. 使用python调用高德地图的web服务

    在使用高德地图的web 服务之前,需要先注册为高德开发者 https://lbs.amap.com/api/webservice/summary/ 注册完毕后,进入控制台可以看到如下界面: 点击&qu ...

  3. 带有Jersey的JAX-RS教程,用于RESTful Web服务

    在当今世界,数据扮演着非常重要的角色. 如此众多的应用程序将各种类型的数据用于不同的操作,所以最重要的方面是应用程序之间的通信. 当应用程序可以通信时,它们之间的数据共享变得容易. 就像在亚洲运行的应 ...

  4. android高德天气api接口,天气查询-API文档-开发指南-Web服务 API | 高德地图API

    产品介绍 天气查询是一个简单的HTTP接口,根据用户输入的adcode,查询目标区域当前/未来的天气情况. 使用API前您需先申请Key,若无高德地图API账号需要先申请账号. 适用场景 需要使用相关 ...

  5. 高德天气 php,天气查询-API文档-开发指南-Web服务 API | 高德地图API

    产品介绍 天气查询是一个简单的HTTP接口,根据用户输入的adcode,查询目标区域当前/未来的天气情况. 使用API前您需先申请Key,若无高德地图API账号需要先申请账号. 适用场景 需要使用相关 ...

  6. 设置电子围栏 高德地图_地理围栏-API文档-开发指南-Web服务 API | 高德地图API

    产品介绍 地理围栏服务是一类HTTP接口,提供在服务端,增删改查地理围栏的功能,同时支持对于设备与围栏关系进行监控. 适用场景 地理围栏服务适用于需要针对特定区域,监控用户位置与区域关系的场景中.包括 ...

  7. 接口获取行政区划代码_行政区域查询-API文档-开发指南-Web服务 API | 高德地图API...

    产品介绍 行政区域查询是一类简单的HTTP接口,根据用户输入的搜索条件可以帮助用户快速的查找特定的行政区域信息. 使用API前您需先申请Key,若无高德地图API账号需要先申请账号. 例如:中国> ...

  8. android ip 定位,IP定位-API文档-开发指南-Web服务 API | 高德地图API

    产品介绍 IP定位是一套简单的HTTP接口,根据用户输入的IP地址,能够快速的帮用户定位IP的所在位置. IP定位 2.0(推荐):支持IPV4和IPV6两种地址,还支持部分国外国家或地区的IP解析: ...

  9. 高德 ip定位 android,IP定位-API文档-开发指南-Web服务 API | 高德地图API

    产品介绍 IP定位是一套简单的HTTP接口,根据用户输入的IP地址,能够快速的帮用户定位IP的所在位置. IP定位 2.0(推荐):支持IPV4和IPV6两种地址,还支持部分国外国家或地区的IP解析: ...

  10. 批量调取接口_批量请求接口-API文档-开发指南-Web服务 API | 高德地图API

    产品介绍 特别说明:受产品策略调整影响,自2020年11月起,建议您不再使用此批量接口.后续平台会逐步废弃并下线此服务. 批量接口通过用户传入合并后的请求,同时返回多个请求的顺序集合,目前最多支持20 ...

最新文章

  1. 10种Git技巧,让你省时省力又省心!
  2. 【字符串】字符串查找 ( 蛮力算法 )
  3. 明天是我的生日,写给24岁的自己
  4. 关于oracle数据库的操作的命令
  5. P5748 集合划分计数(贝尔数/多项式)
  6. 随机生成1024个数,存入一段内存,用指针实现获取1024个数的最大数地址,最小数地址
  7. [css] 写一个动画,向上匀速移动100px,向下以1.5倍速度移动200px,一直反复循环
  8. python基础(14)之 类和对象
  9. http GET 和 POST 请求的优缺点和误区 --前端优化
  10. Java定时器Timer学习之一
  11. 详解linux io flush
  12. matlab剩余寿命概率密度,分享关于评估设备剩余使用寿命的三种方法
  13. 东软软件动态生成对数据表更新操作的方法
  14. Android使用Intent完成活动之间的通信
  15. 我对骨骼动画的理解(最精减的骨骼动画类)
  16. MySQL命令窗口下中文显示乱码的解决过程
  17. 汉语为主体的计算机网络环境,读书笔记 | 鲁川:汉语语法的意合网络 | 从网络到表层序列的生成...
  18. Python 分类算法(1)——逻辑回归logistic regression之代码实现(2)
  19. Docker 命令基础及进阶
  20. 乌隆他尼皇家大学举办第48届泰国大学生运动会新闻发布会

热门文章

  1. 静态嵌套类和非静态嵌套类
  2. NOIP2018初赛 解题报告
  3. 简历编写技巧-java开发工程师简历实战
  4. 搭建本地LNMP开发环境(2.5)-安装vim
  5. 再造轮子之网易彩票-第一季(IOS 篇 by sixleaves)
  6. Google搜索解析
  7. 建立完善的日期定义表
  8. LINUX 导出文件夹到本地
  9. 《开学第一课》观后感—吕中琪
  10. Java 2017.11.20 杨浩宁作业