国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Jersey客戶端API調用REST風格的Web服務

2019-11-14 22:54:30
字體:
來源:轉載
供稿:網友
Jersey客戶端API調用REST風格的Web服務

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/A1000037B04B8C100      * @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 }


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 卢氏县| 富川| 遂平县| 分宜县| 浦江县| 右玉县| 南岸区| 顺昌县| 贵德县| 平凉市| 磐安县| 邯郸县| 大同县| 子长县| 广灵县| 昭觉县| 乐陵市| 综艺| 蒙山县| 临城县| 马鞍山市| 阿城市| 嘉兴市| 大邑县| 丹凤县| 文安县| 股票| 女性| 兴海县| 彝良县| 侯马市| 达孜县| 湘潭市| 盘锦市| 石屏县| 宣化县| 安吉县| 宁津县| 三明市| 横峰县| 吉林省|