zoukankan      html  css  js  c++  java
  • 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());
    
        }
    }
  • 相关阅读:
    团队开发第二阶段
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    C++类class和结构体struct区别
    c++简单的类的建立与参数的两种传递方法
    C++ 使用delete删除指针
    暂存
  • 原文地址:https://www.cnblogs.com/dlsunf/p/8868101.html
Copyright © 2011-2022 走看看