REST如何传递空路径参数?

时间:2012-04-14 07:50:08

标签: java rest jax-rs

我正在使用REST

构建Netbean 7.1.1 Glassfish 3.1.2网络应用

我有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(即没有路径参数)发送请求时,不会调用servlet,因为URL没有{name}路径参数。

是否无法调用第二个URL并调用上面的servlet?

我能想到的一个替代方案是使用query parameter

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

也许我可以解析它并查看"value"是否为null然后相应地采取行动..

2 个答案:

答案 0 :(得分:29)

您可以为路径参数指定正则表达式 (见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 / resource / getall”和“http:// myPage / resource / getall / name”。

答案 1 :(得分:-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??? 
  }