REST如何传递空路径参数?
问题描述:
我建设使用Netbean 7.1.1 Glassfish 3.1.2
REST如何传递空路径参数?
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,则采取了相应的行动..
答
您可以指定一个正则表达式您的路径参数 (请参阅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 /名称”。
答
@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
谢谢,我试过以上,并完美地工作! – 2012-04-16 01:09:08
嗨!如果情况是下一步: “http:// myPage/resource/getall/name?type = json” “http:// myPage/resource/getall?type = json” 上述解决方案不起作用。 – Andrew 2015-03-25 10:05:42
@Andrew请创建一个新问题。没有任何语境,就不可能回答这个问题。 – andih 2015-03-25 10:27:40