2011-05-25 25 views
4

我一直在研究Java/Jersey中的小型Web服務,它從XML文件中包含的客戶端讀取用戶信息列表。我目前在所有這些功能中除了一個方面外:在URI中使用多個參數來表示拉取多組用戶信息或多組客戶端信息。我有一個當前有效的版本,但不是最好的方式,也不是項目描述所要求的。在Java中以REST風格處理多個參數

目前,我的代碼如下所示:

@Path("Client/{client}/users") 
public class UserPage 
    { 
    @GET 
    @Produces(MediaType.TEXT_HTML) 
    public String userChoice(@PathParam(value = "client") final String client) 
    {****Method here which handles a list of 'users'****} 

@GET 
@Path("{name}") 
@Produces(MediaType.TEXT_HTML) 
public String userPage(@PathParam(value = "client") final String client, @PathParam(value = "name") final String name) 
    {****Method here which handles 'user' information****} 

第一種方法是從「{}客戶」的URI表示的「客戶」處理用戶的列表。第二種方法在URI中傳遞由「{name}」表示的「用戶」信息。兩者都會以一個參數運作。目前,爲了處理多個'用戶',我將「{name}」逗號分隔爲「Client/Chick-Fil-A/users/Phil,Bradley」。我可以在使用@PathParam並解析後創建這些'用戶'的數組,但我認爲這不是處理這種情況的最佳方式,項目描述需要不同的東西。

有沒有一種方法可以通過格式爲「Client/Chick-Fil-A; cd = Phil,Bradley」的URI完成相同的任務? (The; cd =是什麼給了我最大的麻煩。) 我還需要能夠將這種格式用於多個客戶端,即「Client; cd = Chick-Fil-A,Subway/users; cd = Phil,Bradley 」。

編輯:澄清項目: 客戶信息包含在6個單獨的文件中。這些文件中的每一個都具有相同的3個用戶(這是有效的概念驗證)。我需要能夠提取不同的信息子集,例如,McDonalds和Chick-Fil-A的用戶Phil,或McDonalds的用戶Phil和Peter,或所有客戶的名爲Peter的用戶等。

回答

3

因爲URL是一個保留字符,所以不能在URL路徑中使用'='。然而,還有許多其他角色可用作分隔符,如' - '和','。因此,可以使用' - '而不是'='。如果你真的很想使用'=',那麼你將不得不URL-encode它;不過,我強烈建議不要這樣做,因爲它可能會讓事情變得更加複雜。

你可以看到URL字符串,這裏的語法:

http://www.w3.org/Addressing/URL/url-spec.txt

複製和搜索以下字符串,跳到路徑語法:

path     void | segment [/path ] 

segment     xpalphas 

這麼說,我相信HTTP請求通常僅用於請求單個資源。所以我個人的意見是不按照你實施的方式實施這項服務。對於越來越多的客戶我會使用查詢參數過濾器是這樣的:

Client/{cName}/users?filters=<value1>,<value2> ... 

編輯:從你到了那裏的商業案例,好像你可能需要像

/users?<filters> 
/clients?<filters> 

服務所以說,你想從所有的客戶端讓彼得則可以有這種形式的請求:

/users?name=Peter 

同樣,如果你想獲得傑克和皮特r從星巴克那麼你可以這樣做:

/users?name=Peter,Jack&client=Starbucks 

希望這會有所幫助。

+0

儘管如此,在我看來這不會影響我的目的。我需要能夠從多個客戶端訪問多個用戶,而這些查詢似乎沒有被這些查詢處理。 – ZKSteffel 2011-05-25 19:24:04

+0

哦,我明白了,如何將客戶端名稱移動到查詢參數呢? 所以你有類似/ users?company = &user = ? – Alvin 2011-05-25 19:33:54

+0

在與我的項目中的其他人交談之後,我們決定儘量遠離查詢參數。他們可能會爲這個特定的代碼工作,但正如我所提到的,這個代碼更像是一個概念證明。我們要編寫的實際代碼會更復雜,因此URI中的查詢將變得過於複雜。我更期待更有效地使用@PathParam,因爲@MatrixParam僅適用於URI的最後一部分。 – ZKSteffel 2011-05-25 21:11:37

2

查詢字符串有以下語法,你可以有多個同名的參數:

http://server/path/program?<query_string> 

其中QUERY_STRING語法如下:

field1=value1&field1=value2&field1=value3… 

欲瞭解更多細節,維基百科看看這個條目:http://en.wikipedia.org/wiki/Query_string

+0

我已經查看了一下查詢,但是我的理解是,它們不能像我最後一個示例所需的那樣在URI路徑的中間使用。 – ZKSteffel 2011-05-25 16:28:37