当前位置: 首页 > 工具软件 > JAX-RS > 使用案例 >

java rs 的理解_java restful系列一 认识JAX-RS

淳于涛
2023-12-01

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

 类似资料: