JAX-RS标準支援豐富的參數擷取方式,可以擷取查詢參數、表單參數、請求頭、檔案、路徑等各種類型的參數。
@QueryParam
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;
}
}
@FormParam
如果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;
}
@CookieParam
擷取http請求頭中cookie中的參數值。
@HeaderParam
擷取http請求頭中的參數值。
@FormDataParam
通常在上傳檔案的時候,需要
@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();
}
@MatrixParam
擷取請求URL中的參數中的鍵值對,必須使用“;”作為鍵值對的分隔符,比如/person/1;id=1;name=bella;age=22。此注解用法比較奇特,在項目中并不推薦使用。
@PathParam
該注解定義路徑的參數資訊,用于指定的URI路徑參數,
@PathParam
用在接收請求的方法的參數上。
關于@PathParam注解,請點選連結檢視。
Jersey架構常用注解2:@Path和@PathParam注解
@DefaultValue
以上大多數參數都可以和
@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;
}
}