1. 程式人生 > >Jersey實現Client端:GET/PUT/POST/DELETE

Jersey實現Client端:GET/PUT/POST/DELETE

data eth 避免 source port ret .com seo HA

原文地址:Jersey客戶端API調用REST風格的Web服務

【節選】

要開始使用 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 類的實例後,你可以開始使用它。無論如何,在發出請求前,你需要創建一個 WebResource 對象來封裝客戶端所需要的 Web 資源。

Web 資源創建了一個 WebResponse 對象:

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

通過使用 WebResource 對象來創建要發送到 Web 資源的請求,以及處理從 Web 資源返回的響應。例如,你可以使用 WebResource 對象來發送 HTTP GET

PUTPOST 以及 DELETE 請求。

【實例】

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.rimi.medical.common.domain.ResultPojo;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.core.util.MultivaluedMapImpl; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; /** * JerseyAPi客戶端 * Created by libt on 2015/01/30. */ public class JerseyClientUtil { private static final String BIGDATA_API_URL = ReadSettingProperties.getValue("bigdata_api_url"); /** * post方法 * * @param method 方法名 * @param param 參數 * @return 返回值 */ public static ResultPojo postMethod(String method, String param) { ResultPojo resultPojo = new ResultPojo(); ClientResponse response = null; try { Client client = Client.create(); WebResource resource = client.resource(BIGDATA_API_URL + method); response = resource.type(MediaType.APPLICATION_JSON_TYPE).post(ClientResponse.class, param); int status = response.getStatus(); String data = response.getEntity(String.class); if (status == 200) { JSONObject jsonObject = JSON.parseObject(data); resultPojo.setStatus(jsonObject.getInteger("status")); resultPojo.setData(data); } else { resultPojo.setStatus(response.getStatus()); resultPojo.setData(data); } } catch (Exception e) { resultPojo.setStatus(500);//服務器異常 resultPojo.setErrorMsg(e.getMessage()); } finally { if (response != null) { response.close(); } } return resultPojo; } /** * get方法 * 例如:consultation/recommend?startDate=201412030253&endDate=201412020253 * @param method 方法名 * @param param 參數 * @return 返回值 */ public static ResultPojo getMethod(String method, String param) { ResultPojo resultPojo = new ResultPojo(); ClientResponse response = null; try { Client client = Client.create(); WebResource resource = client.resource(BIGDATA_API_URL + method); response = resource.queryParams(parseJSON2Map(param)).accept(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); int status = response.getStatus(); String data = response.getEntity(String.class); if (status == 200) { JSONObject jsonObject = JSON.parseObject(data); resultPojo.setStatus(jsonObject.getInteger("status")); resultPojo.setData(data); } else { resultPojo.setStatus(response.getStatus()); resultPojo.setData(response.getEntity(String.class)); } } catch (Exception e) { e.printStackTrace(); resultPojo.setStatus(500);//服務器異常 resultPojo.setErrorMsg(e.getMessage()); } finally { if (response != null) { response.close(); } } return resultPojo; } /** * get方法 * 例如:consultation/recommend/A1000037B04B8C * @param method 方法名 * @param param 參數 * @return 返回值 */ public static ResultPojo getMethodOnly(String method, String param) { ResultPojo resultPojo = new ResultPojo(); ClientResponse response = null; try { Client client = Client.create(); WebResource resource = client.resource(BIGDATA_API_URL + method + param); response = resource.accept(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); int status = response.getStatus(); String data = response.getEntity(String.class); if (status == 200) { JSONObject jsonObject = JSON.parseObject(data); resultPojo.setStatus(jsonObject.getInteger("status")); resultPojo.setData(data); } else { resultPojo.setStatus(response.getStatus()); resultPojo.setData(response.getEntity(String.class)); } } catch (Exception e) { e.printStackTrace(); resultPojo.setStatus(500);//服務器異常 resultPojo.setErrorMsg(e.getMessage()); } finally { if (response != null) { response.close(); } } return resultPojo; } public static MultivaluedMap parseJSON2Map(String jsonStr) { MultivaluedMap queryParams = new MultivaluedMapImpl(); //最外層解析 JSONObject json = JSON.parseObject(jsonStr); for (Map.Entry<String, Object> entry : json.entrySet()) { Object v = entry.getValue(); //如果內層還是數組的話,繼續解析 if (v instanceof JSONArray) { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Iterator<Object> it = ((JSONArray) v).iterator(); while (it.hasNext()) { JSONObject json2 = (JSONObject) it.next(); list.add(parseJSON2Map(json2.toJSONString())); } queryParams.add(entry.getKey(), list); } else { queryParams.add(entry.getKey(), v); } } return queryParams; } public static void main(String[] args) { // ResultPojo resultPojo = postMethod("bfr/bfr_choices", "{\"userid\":\"00004\",\"createTime\":\"2014-09-23 16:19:23\",\"bmiScore\":\"80\",\"imageNum\":\"01\",\"type\":\"0\",\" info \":\"個人身體質量分析正常\"}"); ResultPojo resultPojo = getMethod("recommendInfo/query", "{\"endDate\":\"201412020253\",\"startDate\":\"201410010253\"}"); // ResultPojo resultPojo = getMethodOnly("consultation/recommend/", "A1000037B04B8C"); System.out.println(resultPojo.getStatus()); System.out.println(resultPojo.getErrorMsg()); } }

Jersey實現Client端:GET/PUT/POST/DELETE