在《JAX-RS 從傻逼到牛叉 3:路徑匹配》中,我們已經見過如何使用 @PathParam
、@QueryParam
和 @MatrixParam
分別注入 URI 中的路徑參數、矩陣參數和查詢參數,以及如何編程訪問這些參數。本文介紹表單參數、HTTP 頭部參數和 Cookie 參數的注入。
表單參數
HTTP 請求也可以使用提交表單的方式。這時請求方法一般是 POST,當然春哥也無法阻止你用 GET。在前面我們雖然介紹過處理 POST 請求的例子,但那只是利用了 JAX-RS 對 JAXB 的支持,并沒有涉及到對具體請求參數的注入。JAX-RS 提供了 @FormParam
注解來注入 POST 請求的參數,例如:
@POST
public Response createMovie(@FormParam("title") String title) {
// 此處省略若干行
}
這兒省略了 @Consumes
注解,JAX-RS 會自動默認為 @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
,也就是 application/x-www-form-urlencoded
格式的請求。如果請求格式為 multipart/form-data
,就必須顯示指明:
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response createMovie(@FormParam("title") String title) {
// 此處省略若干行
}
JAX-RS 還支持文件的上傳和下載,以后再介紹。
HTTP 頭部參數
注入 HTTP 頭部參數簡單得不能再簡單了:
@GET
@Path("xxx")
@Produces(MediaType.TEXT_PLAIN)
public String xxx(@HeaderParam("User-Agent") String userAgent) {
// 此處省略若干行
}
如果有很多頭部參數,為了避免臃腫的參數列表,可以注入一個頭部對象,然后編程訪問頭部參數:
@GET
@Path("xxx")
@Produces(MediaType.TEXT_PLAIN)
public String xxx(@Context HttpHeaders headers) {
// 此處省略若干行
}
Cookie 參數
注入 Cookie 參數同樣的簡單:
@GET
@Path("xxx")
@Produces(MediaType.TEXT_PLAIN)
public String xxx(@CookieParam("userName") String userName) {
// 此處省略若干行
}
如果希望編程訪問,則可以像編程訪問那樣注入一個 HttpHeaders
對象,然后通過它的 getCookies()
方法來獲取所有的 Cookie。