簡體   English   中英

@Path注釋中冒號(:)的含義

[英]Meaning of colon(:) inside @Path annotation

我是Restful服務的新手。 我正在查看代碼並找到了這一行

@GET

@Path("{image:image/.*}")

有人可以解釋一下上述語法的含義和用法嗎?

@Path表示法支持匹配路徑的正常字符串或匹配模式的正則表達式。 在你的情況下

@Path("{image:image/.*}")

似乎只是匹配一種模式

路徑參數{image}具有任何模式,如image /.*,它基本上轉換為圖像/任何東西,這里的任何東西都不是指“任何”這個詞,而是它的字面意思,即任何有效的文本。

更正:有關完整詳細信息,請參閱@Sotirios Delimanolis答案。 謝謝配偶糾正輸入。

該表示法稱為URI路徑模板,並在文檔中進行了描述

您可以通過在括號{}聲明它來定義新模板變量。 JX-RS環境將綁定從請求的URI到聲明的@PathParam處理程序方法參數的相應路徑段。

從文檔中

URI路徑模板是URI,其中包含嵌入在URI語法中的變量。 這些變量在運行時被替換,以便資源基於替換的URI響應請求。 變量用大括號( {} )表示 例如,查看以下@Path注釋:

 @Path("/users/{username}") 

在這種示例中,提示用戶鍵入他或她的姓名,然后配置為響應對此URI路徑模板的請求的JAX-RS Web服務進行響應。 例如,如果用戶鍵入用戶名“Galileo”,則Web服務會響應以下URL:

 http://example.com/users/Galileo 

要獲取用戶名的值,可以在請求方法的方法參數上使用@PathParam注釋 ,如以下代碼示例所示:

 @Path("/users/{username}") public class UserResource { @GET @Produces("text/xml") public String getUser(@PathParam("username") String userName) { ... } } 

然后,文檔繼續指定表示法的語法

默認情況下,URI變量必須與正則表達式“[^ /] +?”匹配 可以通過在變量名稱后指定不同的正則表達式來自定義此變量 例如,如果用戶名必須僅包含小寫和大寫字母數字字符,請覆蓋變量定義中的默認正則表達式:

 @Path("users/{username: [a-zA-Z][a-zA-Z_0-9]}") 

在此示例中,username變量將僅匹配以一個大寫或小寫字母開頭的用戶名以及零個或多個字母數字字符和下划線字符。 如果用戶名與該模板不匹配,則會向客戶端發送404(未找到)響應。

所以你的榜樣

@Path("{image:image/.*}")

定義名為image的URI模板變量,其中包含與正則表達式匹配的段

image/.*

因此,JAX-RS環境將使用帶注釋的方法來處理URI匹配的請求

http://somehost.com/context-path/image/[anything]

據推測,你的方法會有一個參數

@Path("{image:image/.*}")
public Response handle(@PathParam("image") String path) { /* handling */ }

path的值為"image/[anything]"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM