Jersey实现Client端:GET/PUT/POST/DELETE

时间:2022-05-01 19:33:02

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

    }
}