Jersey API基础及应用例子

  1. 概述:在学习微信接口的过程当中用到了请求web接口资源的操做web

  2. Jersey 客户端API基础 api

    首先须要建立一个com.sun.jersey .api.client.Client 类的实例。微信

    import com.sun.jersey .api.client.Client;app

    Client client = Client.create();ide

    或者 ClientConfig clientConfig = ClienConfig.DefaultClientConfig();post

        Client client = Client.create(clientConfig);                                                               Client 类是建立一个 RESTful Web Service 客户端的主要配置点。你可使用它来配置不一样的客户端属性和功能,而且指出使用哪一个资源提供者。建立一个 Client 类的实例是一个比较昂贵的操做,因此尽可能避免建立一些不须要的客户端实例。比较好的方式是尽量地复用已经存在的实例。学习

        当你建立完一个 Client 类的实例后,你能够开始使用它。不管如何,在发出请求前,你须要建立一个 Web Resource 对象来封装客户端所须要的 Web 资源。ui

    Web 资源建立了一个 WebResponse 对象:编码

    import com.sun.jersey .api.client.WebResource;url

    WebResource webResource = c.resource("https://api.weixin.qq.com/cgi-bin/message/custom/send");

    经过使用 WebResource 对象来建立要发送到 Web 资源的请求,以及处理从 Web 资源返回的响应。例如,你可使用 WebResource 对象来发送 HTTP GET、PUT、POST 以及 DELETE 请求。

        2.1 get 请求:使用 WebResource 类的 get() 方法来提交一个 HTTP GET请求到 Web 资源:

    String s = webResource.get(String.class);

        这表示若是 WebResource 对象的 URL 是https://api.weixin.qq.com/cgi-bin/message/custom/send,那么一个 HTTP GET 请求将会发送到地址为https://api.weixin.qq.com/cgi-bin/message/custom/send的资源。

    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);

    第二种:

    webResource.queryParam("param1",val1).queryParam("param2",val2).get(String.class);

    你还能够指定响应所能接受的 MIME 类型。例如,下面的代码指定了响应的 MIME 类型只能为文本:

    String s = webResource.accept("text/plain").get(String.class);

    2.2 ClientResponse 

    你还能够获取对应请求的 HTTP 状态码,例以下面这个例子展现获取一个请求所返回的文本实体与状态码:   

    ClientResponse response = webResource.accept("text/plain").get(ClientResponse.class);

    int status = response.getStatus();

    String textEntity = response.getEntity(String.class);     

    ClientResponse 对象表明了一个客户端收到的 HTTP 响应。   

    2.3 put请求 :不想写

    2.4 post请求 :一个 POST 请求至关于一个 GET 请求和一个 PUT 请求的综合,也就意味着,你可使用 POST 请求来发送一个实体到指定的 Web 资源而且接收另外一个实体。使用 WebResource 类的 post() 方法来发送一个 HTTP POST 请求到指定的 Web 资源。下面的例子展现了发送一个带有查询参数以及进行了 URL 编码的表单数据的 POST 请求:

    例子1.

    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);

    2.5 delete 请求:使用 Web Resource 类的 delete() 方法来发送 HTTP DELETE 请求到指定的 Web 资源。例如,下面的例子展现删除一个 URI 为 https://api.weixin.qq.com/cgi-bin/message/custom/send 资源:

    ClientResponse response = webResource.path("user/123")

                                         .delete(ClientResponse.class);

     注意:WebResource.path() 方法能够在全部 HTTP 请求中使用,它可让你给要请求的 Web 资源指定一个额外的路径。另外一个  WebResouce 类的方法 header() 能够给你的请求添加 HTTP 头部信息。若是表单提交的话,须要new Form来做为参数提交。

  3. 代码例子 微信发送消息

       /**

         * 往指定用户发送信息

         * @param message

         * @param toUser

         * @return

         */

        public WechatMessageResult send(String message, String toUser) {

           ClientConfig config = new DefaultClientConfig();

            Client client = Client.create(config);

            WebResource webResource = client.resource("https://api.weixin.qq.com/cgi-bin/message/custom/send");

            ClientResponse clientResponse = webResource

                    .queryParam("access_token", getAccessToken().getToken())

                    .post(ClientResponse.class, new Gson().toJson(new MassageBuilder("text").toUser(toUser).textContent(message).bulid()));

            if (clientResponse.getStatus() != 200) {

                throw new IllegalStateException("status error:" + clientResponse.getStatus());

            } else {

                return new Gson().fromJson(clientResponse.getEntity(String.class), WechatMessageResult.class);

            }

        }

相关文章
相关标签/搜索