2012-04-14 99 views
12

我建設使用Netbean 7.1.1 Glassfish 3.1.2REST如何傳遞空路徑參數?

REST Web應用程序我有2個網址:

"http://myPage/resource/getall/name" (get some data by name) 

"http://myPage/resource/getall" (get all data) 

當客戶端使用第一URL發送請求時,下面的servlet調用,並做一些處理。

@Path("getall/{name}") 
@GET 
@Produces("application/json") 
public Object Getall(@PathParam("name") String customerName) { 
     //here I want to call SQL if customerName is not null. is it possible??? 
} 

但我還希望第二個URL調用這個servlet。

我以爲servlet會被調用,我可以檢查customerName == null,然後調用不同的SQL等。

但是,當客戶端使用第二個URL(即沒有路徑參數)發送請求時,由於該URL沒有{name}路徑參數,因此不會調用該servlet。

是不是可以調用第二個URL並調用上面的servlet?

一種選擇,我能想到的就是用query parameter

http://myPage/resource/getall?name=value 

也許我可以分析一下,看看是否"value"爲null,則採取了相應的行動..

回答

26

您可以指定一個正則表達式您的路徑參數 (請參閱2.1.1. @Path)。

如果使用.*匹配空以及非空的名字 所以,如果你寫:

@GET 
@Path("getall/{name: .*}") 
@Produces("application/json") 
public Object Getall(@PathParam("name") String customerName) { 
     //here I want to call SQL if customerName is not null. is it possible??? 
} 

將同時匹配的 「http:// MYPAGE /資源/ GETALL」 和「HTTP:// MYPAGE /資源/ GETALL /名稱」。

+0

謝謝,我試過以上,並完美地工作! – 2012-04-16 01:09:08

+0

嗨!如果情況是下一步: 「http:// myPage/resource/getall/name?type = json」 「http:// myPage/resource/getall?type = json」 上述解決方案不起作用。 – Andrew 2015-03-25 10:05:42

+0

@Andrew請創建一個新問題。沒有任何語境,就不可能回答這個問題。 – andih 2015-03-25 10:27:40

-2
@GET 
@Path("getall{name:(/[^/]+?)?}") 
@Produces("application/json") 
public Object Getall(@PathParam("name") String customerName) { 
    //here I want to call SQL if customerName is not null. is it  

possible??? 
    } 
+0

匹配有或沒有名字, – 2015-03-16 06:24:47