jax-rs的注解使用
2014-03-21 11:45
369 查看
具体api解释可以在jax-rs中查找位于jee文档中:
http://docs.oracle.com/javaee/7/api/
@Path("/cars/{make}")
public class CarResource {
@GET
@Path("/{model}/{year}")
@Produces("image/jpeg")
public Jpeg getPicture(@PathParam("make") String make,
@PathParam("model") PathSegment car,
@PathParam("year") String year) {
String carColor = car.getMatrixParameters().getFirst("color");
...
}
}
可以直接使用@MatrixParam去获取值,这样来得更直接、简洁,例如:
@Path("/{make}")
public class CarResource {
@GET
@Path("/{model}/{year}")
@Produces("image/jpeg")
public Jpeg getPicture(@PathParam("make") String make,
@PathParam("model") String model,
@MatrixParam("color") String color) {
...
}
}
不过如果Path中含有多个同名的MatrixParam,则还是需要使用PathSegment来获取,例如:GET /mercedes/e55;color=black/2006/interior;color=tan
@Path("/customers")
public class CustomerResource {
@GET
@Produces("application/xml")
public String getCustomers(@QueryParam("start") int start,
@QueryParam("size") int size) {
...
}
}
例如有以下Form请求
<FORM action="http://example.com/customers" method="post">
<P>
First name: <INPUT type="text" name="firstname"><BR>
Last name: <INPUT type="text" name="lastname"><BR>
<INPUT type="submit" value="Send">
</P>
</FORM>
可以如下取值:
@Path("/customers")
public class CustomerResource {
@POST
public void createCustomer(@FormParam("firstname") String first,
@FormParam("lastname") String last) {
...
}
}
public class MyService {
@GET
@Produces("text/html")
public String get(@HeaderParam("Referer") String referer) {
...
}
}
public class MyService {
@GET
@Produces("text/html")
public String get(@CookieParam("customerId") int custId) {
...
}
}
这里注入了的是一个cookie的值(customerId为客户端cookie的key),如果想取得更多的信息,而不仅仅是基本值,则可以直接注入javax.ws.rs.core.Cookie对象
@Path("/myservice")
public class MyService {
@GET
@Produces("text/html")
public String get(@CookieParam("customerId") Cookie custId) {
...
}
}
![](http://img.blog.csdn.net/20140321114315078?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU2Vuc3NpYw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
所有的注入都可以通过通用的Context来注入到响应的rs服务类中然后获取相应的值
例如:
使用相应注解:
@Path("/{make}")
public class CarResource {
@GET
@Path("/{model}/{year}")
@Produces("image/jpeg")
public Jpeg getPicture(@PathParam("make") String make,
@PathParam("model") String model,
@MatrixParam("color") String color) {
...
}
}
使用通用注解,然后获取对应的值
@Path("/cars/{make}")
public class CarResource {
@GET
@Path("/{model}/{year}")
@Produces("image/jpeg")
public Jpeg getPicture(@Context UriInfo info) {
String make = info.getPathParameters().getFirst("make");
PathSegment model = info.getPathSegments().get(1);
String color = model.getMatrixParameters().getFirst("color");
...
}
}
public class CustomerResource {
@GET
@Produces("application/xml")
public String getCustomers(@DefaultValue("0") @QueryParam("start") int start,
@DefaultValue("10") @QueryParam("size") int size) {
...
}
}
@Produces("application/xml")
public String get(@Encoded @QueryParam("something") String str) {
...
}
http://docs.oracle.com/javaee/7/api/
基本注解:
@ApplicationPath ---定义所有URI的基本路径
@Path,标注资源类或方法的相对路径
@GET,@PUT,@POST,@DELETE,标注方法是用的HTTP请求的类型
@Produces,标注返回的MIME媒体类型
@Consumes,标注可接受请求的MIME媒体类型
注入类的annotation
@PathParam: 从URI模板参数中提取数据
@MatrixParam:从URI中提取Matrix参数
请求路径:GET /cars/mercedes/e55;color=black/2006。则 make是mercedes;model是e55;year是2006;color是black。@Path("/cars/{make}")
public class CarResource {
@GET
@Path("/{model}/{year}")
@Produces("image/jpeg")
public Jpeg getPicture(@PathParam("make") String make,
@PathParam("model") PathSegment car,
@PathParam("year") String year) {
String carColor = car.getMatrixParameters().getFirst("color");
...
}
}
可以直接使用@MatrixParam去获取值,这样来得更直接、简洁,例如:
@Path("/{make}")
public class CarResource {
@GET
@Path("/{model}/{year}")
@Produces("image/jpeg")
public Jpeg getPicture(@PathParam("make") String make,
@PathParam("model") String model,
@MatrixParam("color") String color) {
...
}
}
不过如果Path中含有多个同名的MatrixParam,则还是需要使用PathSegment来获取,例如:GET /mercedes/e55;color=black/2006/interior;color=tan
@QueryParam:从URI中提取查询参数
请求路径:GET /customers?start=0&size=10@Path("/customers")
public class CustomerResource {
@GET
@Produces("application/xml")
public String getCustomers(@QueryParam("start") int start,
@QueryParam("size") int size) {
...
}
}
@FormParam:提取Post Form参数
FormParam用于提取POST请求中的Form参数,其中Content-Type被假设为application/x-www-formurlencoded。例如有以下Form请求
<FORM action="http://example.com/customers" method="post">
<P>
First name: <INPUT type="text" name="firstname"><BR>
Last name: <INPUT type="text" name="lastname"><BR>
<INPUT type="submit" value="Send">
</P>
</FORM>
可以如下取值:
@Path("/customers")
public class CustomerResource {
@POST
public void createCustomer(@FormParam("firstname") String first,
@FormParam("lastname") String last) {
...
}
}
@HeaderParam:提取HTTP请求头信息
@Path("/myservice")public class MyService {
@GET
@Produces("text/html")
public String get(@HeaderParam("Referer") String referer) {
...
}
}
@CookieParam:提取客户设置的cookie的信息
@Path("/myservice")public class MyService {
@GET
@Produces("text/html")
public String get(@CookieParam("customerId") int custId) {
...
}
}
这里注入了的是一个cookie的值(customerId为客户端cookie的key),如果想取得更多的信息,而不仅仅是基本值,则可以直接注入javax.ws.rs.core.Cookie对象
@Path("/myservice")
public class MyService {
@GET
@Produces("text/html")
public String get(@CookieParam("customerId") Cookie custId) {
...
}
}
@Context:通用的注入annotation,允许注入各种帮助或者信息对象
所有的注入都可以通过通用的Context来注入到响应的rs服务类中然后获取相应的值
例如:
使用相应注解:
@Path("/{make}")
public class CarResource {
@GET
@Path("/{model}/{year}")
@Produces("image/jpeg")
public Jpeg getPicture(@PathParam("make") String make,
@PathParam("model") String model,
@MatrixParam("color") String color) {
...
}
}
使用通用注解,然后获取对应的值
@Path("/cars/{make}")
public class CarResource {
@GET
@Path("/{model}/{year}")
@Produces("image/jpeg")
public Jpeg getPicture(@Context UriInfo info) {
String make = info.getPathParameters().getFirst("make");
PathSegment model = info.getPathSegments().get(1);
String color = model.getMatrixParameters().getFirst("color");
...
}
}
扩展注解:
@DefaultValue 可以给某个请求参数定义缺省值,当client的请求中未包含此参数,则缺省参数值将被使用
@Path("/customers")public class CustomerResource {
@GET
@Produces("application/xml")
public String getCustomers(@DefaultValue("0") @QueryParam("start") int start,
@DefaultValue("10") @QueryParam("size") int size) {
...
}
}
@Encoded 用来告诉JAX-RS,不需要自动解码,直接使用编码后的请求值
@GET@Produces("application/xml")
public String get(@Encoded @QueryParam("something") String str) {
...
}
相关文章推荐
- webservice快速入门-使用JAX-WS注解的方式快速搭建ws服务端和客户端(一)
- 最给力的java REST入门:使用 JAX-RS 简化 REST 应用开发(转自代码商人)
- 使用maven整合ssm报错:JAX-RS (REST Web Services) 2.0 can not be installed
- 使用 JAX-RS 简化 REST 应用开发 实例
- java REST入门:使用 JAX-RS 简化 REST 应用开发
- jax-rs注解工作原理介绍
- webservice快速入门-使用JAX-WS注解的方式快速搭建ws服务端和客户端(一)
- 使用JAX-RS创建RESTful Web Service
- 使用 JAX-RS 简化 REST 应用开发
- spring注解方式,使用jax-ws配置webservice,适合小白。看不会你打死我!
- JAX-RS的参考实现:《使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务》
- 使用JAX-RS创建RESTful Web Service
- WebService(注解),CXF框架(jax-ws,Jax-rs,与spring整合)
- 5、使用JAX-WS注解开发WebService程序
- 使用JAX-RS创建RESTful Web Service
- 使用JAX-RS创建RESTful Web Service
- REST with Java (JAX-RS) using Jersey - Tutorial(使用REST的Jersey与Java(JAX-RS)-教程)
- JAX-RS规范-常用注解解析
- WebService --- JAX-RS注解和RESTful
- 框架 day64 WebService(注解),CXF框架(jax-ws,Jax-rs,与spring整合)