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


原文地址: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 GETPUTPOST 以及 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());

    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM