jersey學習:注解解析(系列三)


概述

系列二中,PersonResource使用很多的注解,這些注解都是基於jsr311規范實現的,所使用的jar包就是api目錄下的javax.ws.rs-api-2.0.1.jar。在早期的1.x版本中使用的是jsr311-api-1.1.1.jar,而javax.ws.rs-api-2.0.1.jar要比jsr311-api-1.1.1.jar功能更加強大,比如@BeanParam,有興趣的話可以自行查看文檔比較兩者的差異,這里不再贅述。

下面主要講一下javax.ws.rs-api-2.0.1.jar常用到的注解。

 

@Path

@Path有兩個作用:

  1. 標注class,表明該類是個資源類。凡是資源類,必須使用@Path注解,不然jersey無法掃描到該資源類。
  2. 標注method,表示具體的請求資源的路徑

這點和Spring的@RequestMapping不同,@RequestMapping只是簡單的注解請求路徑而已,@Controller才是表明該類是個action,而@Path一人扮演兩個角色。

 

@GET

@GET、@POST、@PUT、@DELETE指明http請求的方式屬於get,post,put,delete中的哪一種。具體的指定請求方式,需要在客戶端發起請求指定

 

@Consumes

指定http請求的MIME類型,默認是*/*,表示任意的MIME類型。該注解的值是個數組類型,支持多個MIME類型,可以使用MediaType來指定MIME類型(這里我很反感將Consumes直譯為消費者,這種翻譯會讓人晦澀難懂,就是指定請求的MIME類型而已)

 

@Produces

指定http響應的MIME類型,默認是*/*,表示任意的MIME類型。該注解的值是個數組類型,支持多個MIME類型,可以使用MediaType來指定MIME類型(同上,反感將Produces直譯為生產者,指定響應的MIME類型)

 

@PathParam

配合@Path來使用的,使用方式在@Path用{}來指定路徑中匹配的參數,這種匹配是通過正則表達式來實現的。比如PersonResource使用@Path("/{id}")

 

@QueryParam

@QueryParam獲取的參數,實際就是url中拼接在?后面的參數

 

@FormParam

客戶端以form(MIME為application/x-www-form-urlencoded)的方式提交表單,服務端使用@FormParam解析form表單中的參數

 

@FormDataParam

通常在上傳文件的時候,需要@FormDataParam。客戶端提交form(MIME為multipart/form-data)的方式提交表單,服務端使用@FormDataParam來解析form表單中的參數

 

@HeaderParam

獲取http請求頭中的參數值

 

@CookieParam

獲取http請求頭中cookie中的參數值

 

@MatrixParam

獲取請求URL中的參數中的鍵值對,必須使用“;”作為鍵值對的分隔符,比如/person/1;id=1;name=bella;age=22。除此之外呢,@MatrixParam可以接受List參數,尤其是在鍵值對key相同的時候,就會被解析為List

 

@DefaultValue

@DefaultValue配合@PathParam、@QueryParam、@FormParam、@FormDataParam、@MatrixParam、@HeaderParam、@CookieParam等使用,如果請求指定的參數中沒有值,就使用@DefaultValue中的值為默認值。注意:@DefaultValue指定的值在解析過程中出錯(比如@DefaultValue("test") @QueryParam("age") int age),將返回404錯誤。

 

@BeanParam

如果傳遞的參數較多,可以自己寫個bean,bean中的字段使用@PathParam、@QueryParam、@FormParam、@FormDataParam、@MatrixParam、@HeaderParam、@CookieParam來注解。而在resouces中具體方法參數中就可以使用@BeanParam來注解這個自定義的bean

 

@Context

用來注入,和Spring的@AutoWired效果類似。可以注入UriInfo、HttpHeader、ServletConfig、ServletContext、HttpServletRequest、HttpServletResponse等,按照業務需要選擇性注入。

 

@Encoded

禁止解碼,客戶端發送的參數是什么樣,服務器接收到的參數就是什么樣

 

總結

  1. 按照RESTFUL風格,選擇性地使用@GET、@POST、@PUT、@DELETE
  2. 參數的@*Param多樣,按照自己的需要來使用
  3. 想了解更多,可以查閱jersey官方文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM