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