一、@Path
若希望一個Java類能夠處理REST請求,則這個類必須至少添加一個@Path("/")的annotation;
對于方法,這個annotation是可選的,如果不添加,則繼承類的定義。
(1)@Path裡的值可以是一個複雜的表達式,例如@Path("{id}") ,其中 {id}表達式代碼了一個模闆參數;
一個模闆參數是一個定義在@Path裡的通配符,它以 { 開始,中間是一堆字母和數字的混合串(不能包含 / 字元),以 } 結尾。又如: @Path("{firstName}-{lastName}") .
(2)@Path也支援正規表達式,例如: @Path("{id: \\d+}") ,其中 \\d+ 表示一個數字。格式為: A : B
二、@Method
(1)一個方法上隻有添加了某個Http Method的annotation,例如@GET,才有資格處理請求。
(2)對于資源的具體操作類型,由HTTP動詞表示。
常用的HTTP動詞有下面五個(括号裡是對應的SQL指令)。
- GET(SELECT):從伺服器取出資源(一項或多項)。
- POST(CREATE):在伺服器建立一個資源。
- PUT(UPDATE):在伺服器更新資源(用戶端提供改變後的完整資源)。
- PATCH(UPDATE):在伺服器更新資源(用戶端提供改變的屬性)。
- DELETE(DELETE):從伺服器删除資源。
還有兩個不常用的HTTP動詞。
- HEAD:擷取資源的中繼資料。
- OPTIONS:擷取資訊,關于資源的哪些屬性是用戶端可以改變的。
下面是一些例子。
- GET /zoos:列出所有動物園
- POST /zoos:建立一個動物園
- GET /zoos/ID:擷取某個指定動物園的資訊
- PUT /zoos/ID:更新某個指定動物園的資訊(提供該動物園的全部資訊)
- PATCH /zoos/ID:更新某個指定動物園的資訊(提供該動物園的部分資訊)
- DELETE /zoos/ID:删除某個動物園
- GET /zoos/ID/animals:列出某個指定動物園的所有動物
- DELETE /zoos/ID/animals/ID:删除某個指定動物園的指定動物
三:Accept和Content-Type的差別
Accept就表示接口要傳回給用戶端的資料格式,
Content-Type表示用戶端發送給伺服器端的資料格式。這個是寫REST接口時候定義的 正常如果伺服器沒定義Accept但是自己添加了的話 會報404 沒找到對應接口。
四:@Produces 表示類或者方法傳回的MIME資料類型。
有幾種格式如下:
(1)@Produces("text/plain") 文本類型
(2)@Produces("text/html") Html類型
(3)@Produces({"application/xml"}) Xml類型
(4)@Produces({ "application/json"}) Json類型
可以一次注解兩種或多種的MIME類型,格式如:{"application/xml", "application/json"}這表示兩者都可以使用,但是選擇的時候一般會選擇前者,即application/xml,因為它第一次出現。
五:
@Consumes
代表的是一個資源可以接受的 MIME 類型。
@Consumes
注釋針對
Content-Type
請求頭進行比對,以決定方法是否能接受給定請求的内容。
六:@Queryparam與@Pathparam差別
@Queryparam:指定的是URL中的參數是以鍵值對的形式出現的,而在程式中 @QueryParam("from") int from則讀出URL中from的值,
例如:URL輸入為:users?from=100&to=200&orderBy=age&orderBy=name
@Pathparam:URL中隻出現參數的值,不出現鍵值對
例如: /users/100