JAX-RS 從傻逼到牛叉 6:參數(shù)注入
Posted on 2011-12-29 16:34 蜀山兆孨龘 閱讀(4406) 評(píng)論(4) 編輯 收藏 所屬分類: Java EE 、SOA在《JAX-RS 從傻逼到牛叉 3:路徑匹配》中,我們已經(jīng)見(jiàn)過(guò)如何使用 @PathParam
、@QueryParam
和 @MatrixParam
分別注入 URI 中的路徑參數(shù)、矩陣參數(shù)和查詢參數(shù),以及如何編程訪問(wèn)這些參數(shù)。本文介紹表單參數(shù)、HTTP 頭部參數(shù)和 Cookie 參數(shù)的注入。
表單參數(shù)
HTTP 請(qǐng)求也可以使用提交表單的方式。這時(shí)請(qǐng)求方法一般是 POST,當(dāng)然春哥也無(wú)法阻止你用 GET。在前面我們雖然介紹過(guò)處理 POST 請(qǐng)求的例子,但那只是利用了 JAX-RS 對(duì) JAXB 的支持,并沒(méi)有涉及到對(duì)具體請(qǐng)求參數(shù)的注入。JAX-RS 提供了 @FormParam
注解來(lái)注入 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ì)象,然后編程訪問(wèn)頭部參數(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) { // 此處省略若干行 }
如果希望編程訪問(wèn),則可以像編程訪問(wèn)那樣注入一個(gè) HttpHeaders
對(duì)象,然后通過(guò)它的 getCookies()
方法來(lái)獲取所有的 Cookie。