JAX-RS标准支持丰富的参数获取方式,可以获取查询参数、表单参数、请求头、文件、路径等各种类型的参数。
HTTP请求路径中的?k1=v1&k2=v2
这样的键值对称为查询参数,@QueryParam
注解用来获取HTTP地址中的查询参数。
举例:假设HTTP访问地址为http://localhost/user?name=Michale&age=120
,则在方法中可获取查询参数。
@Path("/user")
public class UserRes {
//获取用户列表
@GET
@Path("")
@Produces(MediaType.APPLICATION_JSON)
public String getAll(@QueryParam("name") String name,
@QueryParam("age") int age) {
System.out.println(name);
System.out.println(age);
return "name: " + name + " , age: " + age;
}
}
如果HTTP是以application/x-www-form-urlencoded
的方式提交表单,则使用@FormParam
注解获取表单参数。
//创建用户
@PUT
@Path("")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public String add(@FormParam("name") String name,
@FormParam("age") int age) {
return "name: " + name + " , age: " + age;
}
获取http请求头中cookie中的参数值。
获取http请求头中的参数值。
通常在上传文件的时候,需要@FormDataParam
。客户端提交form(MIME为multipart/form-data
)的方式提交表单,服务端使用@FormDataParam来解析form表单中的参数。
需要注意的是,@FormDataParam
需要jersey-media-multipart
依赖库的支持。在maven中需加入:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>2.19</version>
</dependency>
文件上传示例代码
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail) {
String uploadedFileLocation = "d://uploaded/" + fileDetail.getFileName();
// save it
writeToFile(uploadedInputStream, uploadedFileLocation);
String output = "File uploaded to : " + uploadedFileLocation;
return Response.status(200).entity(output).build();
}
获取请求URL中的参数中的键值对,必须使用“;”作为键值对的分隔符,比如/person/1;id=1;name=bella;age=22。此注解用法比较奇特,在项目中并不推荐使用。
该注解定义路径的参数信息,用于指定的URI路径参数,@PathParam
用在接收请求的方法的参数上。
关于@PathParam注解,请点击链接查看。
Jersey框架常用注解2:@Path和@PathParam注解
以上大多数参数都可以和@DefaultVaule
一起使用,为参数指定一个默认值,当请求中不包括该参数时候使用这个默认值。
@Path("/user")
public class UserRes {
//获取用户列表
@GET
@Path("")
@Produces(MediaType.APPLICATION_JSON)
public String getAll(@QueryParam("name") String name,
@QueryParam("age") @DefaultValue("10") int age) {
System.out.println(name);
System.out.println(age);
return "name: " + name + " , age: " + age;
}
}