一. JAX-RS与Jersey简介
1. JAX-RS简介
在Java EE 6 中引入了对 JSR-311 的支持。JSR-311(也就是JAX-RS:Java API for RESTful Web Services)旨在定义一个统一的规范,它的核心概念是resource,也就是面向资源。JAX-RS使得 Java 程序员可以使用一套固定的接口来开发 REST 应用,避免了依赖于第三方框架。同时,JAX-RS 使用 POJO 编程模型和基于注解的配置,并集成了 JAXB,从而可以有效缩短 REST 应用的开发周期。
JAX-RS 定义的 API 位于 javax.ws.rs 包中,其中一些主要的接口、注解和抽象类如下图所示。
javax.ws.rs 包概况:
可以把 JAX-RS 理解为是一套开发协议,该协议具体的实现由第三方来完成,例如 Sun 的实现 Jersey框架、Apache 的 CXF框架 以及 JBoss 的 RESTEasy框架。
其中Jersey,RESTEasy这两个框架创建的应用,可以很方便地部署到Servlet 容器中,比如Tomcat,JBoss等。
2. Jersey框架简介
Jersey是对JAX-RS(JSR311)协议的实现,用于构建RESTful Web Service,可以进一步地简化 RESTful service 和 client 的开发。
也就是说Jersey是一个RESTful框架,与SpringMVC框架类似,但是使用上面和SpringMVC又有不同。此外Jersey还提供一些额外的API和扩展机制,所以我们可以按照自己的需要对Jersey进行扩展。
Jersey的一大特点就是,基于Jersey的REST应用,可以运行在Servlet环境下面,也可以脱离该环境。
3. Jersey常用注解
@Path
@Path注解的值是一个相对的URI路径。@Path的有没有/开头是一样的,同理,结尾有没有包含/也是一样的。
请求类注解
@GET, @PUT, @POST, @DELETE, … (HTTP Methods)
@GET, @PUT, @POST, @DELETE, @HEAD这些注解称为resource method designator,与HTTP规范中定义的方法一致。这些方法决定资源的行为。
@Produce
@Produce注解指定返回给客户端的MIME媒体类型。可以用于注解类或者注解方法。如果类中的方法没有指定,则默认使用类级别的@Produce值。@Produce注解可以指定多个值,同时可以指定quality factor:
@Produces({"application/xml; qs=0.9", "application/json"})
@Consumes
该注解用于指定可以接受的客户端请求的MIME媒体类型: