RestFul Web 服务
REST 在 2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之一。
REST 中最重要的概念是资源(resources),使用全球 ID(通常使用 URI)标识。客户端应用程序使用 HTTP 方法(GET/ POST/ PUT/ DELETE)操作资源或资源集。RESTful Web 服务是使用 HTTP 和 REST 原理实现的Web 服务。通常,RESTful Web 服务应该定义以下方面:
- Web 服务的基/根 URI,比如 http://host/<appcontext>/resources。
- 支持 MIME 类型的响应数据,包括 JSON/XML/ATOM 等等。
- 服务支持的操作集合(例如 POST、GET、PUT 或 DELETE)。
Jersey的四种行为
方法
HTTP 方法映射到资源的 CRUD(创建、读取、更新和删除) 操作。尽管您可以做一些小修改,比如让 PUT
方法变成创建或更新,但基本的模式如下:
- HTTP
GET
:获取/列出/检索单个资源或资源集合。 - HTTP
POST
:新建资源。 - HTTP
PUT
:更新现有资源或资源集合。 - HTTP
DELETE
:删除资源或资源集合。
方法/资源 | 资源集合; URI 如: | 成员资源; URI 如: | 对应的操作 |
POST | 列出资源集合的所有成员。 | 检索标识为 1234 的资源的表示形式。 | C(创建) |
GET | 使用一个集合更新(替换)另一个集合。 | 更新标记为 1234 的数字资源。 | R(读取) |
PUT | 在集合中创建数字资源,其ID 是自动分配的。 | 在下面创建一个子资源。 | U(更新) |
DELETE | 删除整个资源集合。 | 删除标记为 1234 的数字资源。 | D(删除) |
相关的架包结构
· 核心服务器:jersey-core.jar,jersey-server.jar,jsr311-api.jar,asm.jar
· 核心客户端:(用于测试)jersey-client.jar
· JAXB 支持:(在高级样例中使用)jaxb-impl.jar,jaxb-api.jar,activation.jar,stax-api.jar,wstx-asl.jar
· JSON 支持:(在高级样例中使用)jersey-json.jar
· Spring支持:(在高级样例中使用)jersey-spirng.jar
元注解信息说明
生存周期说明
1. 默认不使用注解,表示生存周期等于request,请求过后自动销毁,默认是线程安全的。
2. application,使用@Singleton注解。生存周期等于整个应用程序的生存周期。
3. session,使用@PerSession注解。生存周期等于一个session请求,session销毁,该rest资源实例也同时销毁。
jersey常用注解解释:
Annotation | 作用 | 说明 |
@GET | 查询请求 | 相当于数据库的查询数据操作 |
@POST | 插入请求 | 相当于数据库的插入数据操作 |
@PUT | 更新请求 | 相当于数据库的更新数据操作 |
@DELETE | 删除请求 | 相当于数据的删除数据操作 |
@Path | uri路径 | 定义资源的访问路径,client通过这个路径访问资源。比如:@Path("user") |
@Produces | 指定返回MIME格式 | 资源按照那种数据格式返回,可取的值有:MediaType.APPLICATION_XXX。比如:@Produces(MediaType.APPLICATION_XML) |
@Consumes | 接受指定的MIME格式 | 只有符合这个参数设置的请求再能访问到这个资源。比如@Consumes("application/x-www-form-urlencoded") |
@PathParam | uri路径参数 | 写在方法的参数中,获得请求路径参数。比如:@PathParam("username") String userName |
@QueryParam | uri路径请求参数 | 写在方法的参数中,获得请求路径附带的参数。比如:@QueryParam("desc") String desc |
@DefaultValue | 设置@QueryParam参数的默认值 | 如果@QueryParam没有接收到值,就使用默认值。比如:@DefaultValue("description") @QueryParam("desc") String desc |
@FormParam | form传递的参数 | 接受form传递过来的参数。比如:@FormParam("name") String userName |
@BeanParam | 通过Bena的形式传递参数 | 接受client传递的bean类型的参数,同时这个bean可以在属性上配置@FormParam用以解决client的属性名称和bean的属性名称不一致的问题。比如:@BeanParam User user |
@Context | 获得一些系统环境信息 | 通过@Context可以获得以下信息:UriInfo、ServletConfig、ServletContext、HttpServletRequest、HttpServletResponse和HttpHeaders等 |
@XmlRootElement | 将bean转换为xml | 如果要讲bean以xml或json的格式返回,必须要这个注解。比如: @XmlRootElement public class User{...} |
@XmlElements | ||
@XmlElement |