首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务-4 与 REST 服务通讯的客户端

使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务-4 与 REST 服务通讯的客户端

与 REST 服务通讯的客户端在目前为止的示例中,我开发了一个支持 CRUD 的 RESTful Web 服务。现在我开始解释如何使用 curl 和 Jersey 客户端 API 与该 REST 服务通讯。这样一来,我可以测试服务器端代码,并介绍更多有关客户端技术的信息。
使用 curl 与 REST 服务通讯Curl 是一个流行的命令行工具,可以向使用 HTTP 和 HTTPS 协议的服务器发送请求。这是一个与 RESTful Web 服务通讯的好工具,因为它可以通过任何 HTTP 方法发送内容。Curl 已经在 Linux 和 Mac 中自带了,并且有一个实用工具,可以在 Windows® 平台上进行安装(见 )。
现在,我们初始化获取所有联系人的第一个 curl 命令。您可以参考  获取服务器端代码。
curl http://localhost:8080/Jersey/rest/contacts
响应将使用 XML 并包含所有联系人。
注意,getContacts() 方法还生成一个             application/json MIME 类型响应。您还可以请求该类型的内容。
curl –HAccept:application/json http://localhost:8080/Jersey/rest/contacts
响应将是一个包含所有联系人的 JSON 字符串。
现在,我将 PUT 一个新的联系人。注意, 中的 putContact() 方法接受 XML 并使用 JAXB 将 XML 绑定到 Contact 对象。
1
2
curl -X PUT -HContent-type:application/xml --data "<contact><id>foo</id>
                <name>bar</name></contact>" http://localhost:8080/Jersey/rest/contacts/foo




一个通过 “foo” 识别的新联系人将添加到联系人存储库。您可以使用 URI /contacts 或 /contacts/foo 验证联系人集合或单个联系人。
使用 Jersey Client 与 REST 服务通讯Jersey 还提供了一个客户端库,帮助您与服务器通讯并对 RESTful 服务进行单元测试。该库是一个一般实现,可以整合任何 HTTP/HTTPS-based Web 服务。
客户端的核心类是 WebResource 类。您可以使用该类根据根 URI 构建一个请求 URL,然后发送请求并获取响应。清单 10 展示了如何创建 WebResource 实例。注意 WebResource 是一个大对象,因此只创建一次。
清单 10. 创建 WebResource 实例
1
2
Client c = Client.create();
WebResource r=c.resource("http://localhost:8080/Jersey/rest/contacts");




第一个 Jersey 客户端示例将发送 GET 请求获取所有联系人并打印响应状态码和响应内容,参见清单 11。
清单 11. GET 所有联系人并打印响应
1
2
3
4
5
ClientResponse response = r.get(ClientResponse.class);
System.out.println( response.getStatus() );
System.out.println( response.getHeaders().get("Content-Type") );
String entity = response.getEntity(String.class);
System.out.println(entity);




清单            12 展示了另一个创建通过 “foo” 识别的新联系人的示例。
清单 12. 创建一个联系人
1
2
3
4
5
6
7
8
9
10
Address[] addrs = {
    new Address("Shanghai", "Ke Yuan Street")
};
Contact c = new Contact("foo", "Foo Bar", Arrays.asList(addrs));

ClientResponse response = r
    .path(c.getId())
    .accept(MediaType.APPLICATION_XML)
    .put(ClientResponse.class, c);
System.out.println(response.getStatus());




注意 WebResource 实例的 API。它构建 URI,设置请求头,并在一行代码中调用请求。内容(Contact 对象)将自动绑定到 XML。
清单 13 展示了检索通过 “foo” 识别的联系人(已上一个示例中创建)的最后一个示例然后删除该联系人。
清单 13. 检索 “foo” 联系人并删除
1
2
3
4
5
6
7
8
9
10
GenericType<JAXBElement<Contact>> generic = new GenericType<JAXBElement<Contact>>() {};
JAXBElement<Contact> jaxbContact = r
    .path("foo")
    .type(MediaType.APPLICATION_XML)
    .get(generic);
Contact contact = jaxbContact.getValue();
System.out.println(contact.getId() + ": " + contact.getName());

ClientResponse response = r.path("foo").delete(ClientResponse.class);
System.out.println(response.getStatus());




注意,当您想获取 JAXB bean 响应时,您需要使用 Java 2 Platform, Standard Edition (J2SE) 中引入的范型特性。
使用 Jersey 客户端练习这些示例。您可以在资源包中找到更多样例代码(见 )。还可以参考 Jersey 网站查看更多信息(见 )。
返回列表