1. 什么是JAX-RS
JAX-RS是JAVA EE6 引入的一个新技术。 JAX-RS即Java API for RESTful Web Services,是一个Java 编程语言的应用程序接口,支持按照表述性状态转移(REST)架构风格创建Web服务。
目前基于JAX-RS实现的框架包括:
Apache CXF,开源的Web服务框架。
Jersey, 由Sun提供的JAX-RS的参考实现。
RESTEasy,JBoss的实现。
Restlet,由Jerome Louvel和Dave Pawson开发,是最早的REST框架,先于JAX-RS出现。
Apache Wink,一个Apache软件基金会孵化器中的项目,其服务模块实现JAX-RS规范。
JAX-RS有一套标注规范用来简化Web服务的客户端和服务端的开发和部署,后面系列介绍的Apache Wink,Apache CXF都是基于JAX-RS实现的并遵循这套规范的。下面来熟悉下常用的标注用法。
2. JAX-RS常用标注
@Path,标注资源类或者方法的相对路径。
@Produces,标注返回的MIME媒体类型。
@Consumes,标注可接受请求的MIME媒体类型。
@PathParam,@QueryParam,@HeaderParam,@CookieParam,标注方法的参数来自于HTTP请求的不同位置。
@Context,标注注入上下文对象。
@DefaultValue,标注变量赋值默认值。
@Path,标注资源类或者方法的相对路径
@Path("user")
public class UserResource{
@Path("/add")
public Response add(@PathParam("name") String name) {
return Response.ok().build();
}
}
@GET,@PUT,@POST,@DELETE,标注方法是HTTP请求的类型。
@Path("user")
public class UserResource{
@GET
@Path("/add")
public Response add(@PathParam("name") String name) {
return Response.ok().build();
}
}
@Produces,标注返回的MIME媒体类型
@Path("user")
public class UserResource{
@GET
@Path("/add")
@Produces(MediaType.APPLICATION_JSON)
public Response add(@PathParam("name") String name) {
return Response.ok().build();
}
}
@Consumes,标注可接受请求的MIME媒体类型
@Path("user")
public class UserResource{
@GET
@Path("/add")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response add(@PathParam("name") String name) {
return Response.ok().build();
}
}
@PathParam, 标注方法的参数来自于URL的路径
@Path("user")
public class UserResource{
@GET
@Path("/add/{name}")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response add(@PathParam("name") String name) {
return Response.ok().build();
}
}
URL输入为:http://localhost:8080/user/add/test1
@QueryParam,标注方法的参数来自于URL的查询参数
@Path("user")
public class UserResource{
@GET
@Path("/add")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response add(@QueryParam("name") String name) {
return Response.ok().build();
}
}
URL输入为:http://localhost:8080/user/add?name=test1
@HeaderParam, 标注方法的参数来自于HTTP请求的头信息
@Path("user")
public class UserResource{
@GET
@Path("/add")
public Response add(@HeaderParam("user-agent") String userAgent) {
return Response.ok().entity(userAgent).build();
}
}
当访问URL地址http://localhost:8080/user/add的时候,会输出HTTP 头信息,如: Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0
@CookieParam,标注方法的参数来自于HTTP请求的Cookie
@Path("user")
public class UserResource{
@GET
@Path("/add")
public Response add(@CookieParam("name") Cookie cookie) {
return Response.ok().entity(cookie).build();
}
}
当访问URL地址http://localhost:8080/user/add的时候,会输出cookie中key等于name信息
@DefaultValue,标注方法的参数的默认值
@Path("user")
public class UserResource{
@GET
@Path("/add")
public Response add(@DefaultValue("test") String name) {
return Response.ok().build();
}
}
当访问URL地址http://localhost:8080/user/add的时候,name的默认值是test