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

使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务-2 资源

使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务-2 资源

资源资源是组成 RESTful Web 服务的关键部分。您可以使用 HTTP 方法(如 GET、POST、PUT 和 DELETE)操作资源。应用程序中的所有内容都是资源:员工、联系人、组织等。在 JAX-RX 中,资源通过 POJO 实现,使用 @Path 注释组成其标识符。资源可以有子资源。在这种情况下,父资源是资源集合,子资源是成员资源。
在样例 Contacts 应用程序中,您将操作个人联系人和联系人集合。ContactsResource 是 /contacts URI 组成的集合资源,ContactResource 是 /contacts/{contactId} URI 组成的成员资源。下划线 JavaBean 是一个简单的 Contact 类,使用 id、名称和地址作为成员字段。参见清单 3 和清单 4 了解详情。您还可以从本文最后下载完整的代码包(参见 )。
清单 3. ContactsResource
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Path("/contacts")
public class ContactsResource {
    @Context
    UriInfo uriInfo;
    @Context
    Request request;

    @GET
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public List<Contact> getContacts() {
        List<Contact> contacts = >new ArrayList<Contact>();
        contacts.addAll( ContactStore.getStore().values() );
        return contacts;
    }

@Path("{contact}")
    public ContactResource getContact(
            @PathParam("contact") String contact) {
        return new ContactResource(uriInfo, request, contact);
    }
}




有几个有趣的地方需要注意。
  • @Context: 使用该注释注入上下文对象,比如 Request、Response、UriInfo、ServletContext 等。
  • @Path("{contact}"):这是 @Path 注释,与根路径 “/contacts” 结合形成子资源的 URI。
  • @PathParam("contact"):该注释将参数注入方法参数的路径,在本例中就是联系人 id。其他可用的注释有 @FormParam、@QueryParam 等。
  • @Produces:响应支持多个 MIME 类型。在本例和上一个示例中,APPLICATION/XML 将是默认的 MIME 类型。
您也许还注意到了,GET 方法返回定制 Java 对象而不是 String(纯文本),正如上一个 Hello World 示例所示。            JAX-RS 规范要求实现支持多个表示形式类型,比如 InputStream、byte[]、JAXB 元素、JAXB 元素集合等等,以及将其序列化为 XML、JSON 或纯文本作为响应的能力。下文我将提供更多有关表示形式技术的信息,尤其是 JAXB 元素表示形式。         
清单 4. ContactResource
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class ContactResource {
    @Context
    UriInfo uriInfo;
    @Context
    Request request;
    String contact;
     
    public ContactResource(UriInfo uriInfo, Request request,
            String contact) {
        this.uriInfo = uriInfo;
        this.request = request;
        this.contact = contact;
    }
     
    @GET
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public Contact getContact() {
        Contact cont = ContactStore.getStore().get(contact);
        if(cont==null)
            throw new NotFoundException("No such Contact.");
        return cont;
    }
}




ContactResource 的代码简单明了。注意以下内容:
  •                Representation Type Contact:Contact 是一个简单的 JavaBean,由 @XmlRootElement 注释,这使它可以表示为 XML 或               JSON。
  •                ContactStore:这是基于 HashMap 的内存数据存储库,其实现对于本文不重要。
返回列表