2012-04-14 117 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