Jersey API基础及应用例子

  1. 概述:在学习微信接口的过程中用到了请求web接口资源的操作
  2. Jersey 客户端API基础

    首先需要创建一个com.sun.jersey .api.client.Client 类的实例。

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

    Client client = Client.create();

    或者 ClientConfig clientConfig = ClienConfig.DefaultClientConfig();

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

    当你创建完一个 Client 类的实例后,你可以开始使用它。无论如何,在发出请求前,你需要创建一个 Web Resource 对象来封装客户端所需要的 Web 资源。

    Web 资源创建了一个 WebResponse 对象:

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

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

    }

    }

时间: 2024-08-11 16:55:36

Jersey API基础及应用例子的相关文章

【转载】从头编写 asp.net core 2.0 web api 基础框架 (1)

工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相关知识就不介绍了, 这里主要是从头编写一个asp.net core 2.0 web api的基础框架. 我一直在关注asp.net core 和 angular 2/4, 并在用这对开发了一些比较小的项目. 现在我感觉是时候使用这两个技术去为企业开发大一点的项目了, 由于企业有时候需要SSO(单点登

从头编写 asp.net core 2.0 web api 基础框架 (3)

原文:从头编写 asp.net core 2.0 web api 基础框架 (3) 第一部分:http://www.cnblogs.com/cgzl/p/7637250.html 第二部分:http://www.cnblogs.com/cgzl/p/7640077.html Github源码地址:https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratch 之前我介绍完了asp

从头编写 asp.net core 2.0 web api 基础框架 (1)

原文:从头编写 asp.net core 2.0 web api 基础框架 (1) 工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相关知识就不介绍了, 这里主要是从头编写一个asp.net core 2.0 web api的基础框架. 我一直在关注asp.net core 和 angular 2/4, 并在用这对开发了一些比较小的项目. 现在我感

com.sun.jersey.api.container.ContainerException

com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes jersey 在配置文件web.xml中没有写对而出现的错误!! 出错的原因: 是因为我的web.xml中的配置文件写错了. <servlet> <servlet-name>Jersey REST Service</servlet-name

PYQT基础知识信号+例子

QtCore.QObject.connect(A,SIGNAL(obj),B) A.SIGNAL.CONNECT(B) QtCore.QObject.connect(a.obj,SIGNAL(obj),B,SLOT(obj2)) 1.一个信号可以与另一个信号相连 connect(Object1,SIGNAL(signal1),Object2,SIGNAL(signal1)) 即表示Object1的信号1发射可以触发Object2的信号1发射. 2.表示一个信号可以与多个槽相连 connect(O

三维引擎设计-多线程渲染(平台API基础和封装大致框架)

第一部分: Linux线程API基础 一:线程创建与结束 (1)pthread_t //线程的标识符类型 (2)pthread_create //用来创建一个线程, 参数线程标识符, 线程属性, 线程运行函数地址 (3)pthread_join //用来等待一个线程的结束, 参数被等待线程标识符,用户自定义指针 (4)pthread_exit //线程非正常结束,参数线程返回代码 二:修改线程属性 (1)pthread_attr_t //线程属性结构类型 (2)pthread_attr_init

SQL基础三(例子)

-------------------对分组统计的结果进一步筛选(having子句使用)------------------------------ select * from student2010 --1.查询qypt08class表中各院系的人数,只显示人数多于400的记录 select yx,sum(rs) from qypt08class group by yx having sum(rs)>400 --2.统计stucou表中各门课程的选修人数,只显示人数少于30的记录(显示coun

从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置

原文:从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置 第1部分:http://www.cnblogs.com/cgzl/p/7637250.html 第2部分:http://www.cnblogs.com/cgzl/p/7640077.html 第3部分:http://www.cnblogs.com/cgzl/p/7652413.html Github源码地址:https://github.com/solenovex/Building-asp.net-co

从头编写 asp.net core 2.0 web api 基础框架 (5) EF CRUD

原文:从头编写 asp.net core 2.0 web api 基础框架 (5) EF CRUD 第1部分:http://www.cnblogs.com/cgzl/p/7637250.html 第2部分:http://www.cnblogs.com/cgzl/p/7640077.html 第3部分:http://www.cnblogs.com/cgzl/p/7652413.html 第4部分:http://www.cnblogs.com/cgzl/p/7661805.html Github源码