2010-09-02 79 views
9

是否可以配置GET方法来读取可变数量的URI参数并将它们解释为可变参数(数组)或集合?我知道查询参数可以读取为列表/设置,但我不能为他们去我的情况。是否可以使用可变数量的URI参数配置JAX-RS方法?

例如为:

@GET 
@Produces("text/xml") 
@Path("list/{taskId}") 
public String getTaskCheckLists(@PathParam("taskId") int... taskId) { 
    return Arrays.toString(taskId); 
} 

在此先感谢

回答

8

如果我正确理解你的问题,@Path注释可以采取正则表达式来指定路径组件列表。例如,如下所示:

@GET 
@Path("/list/{taskid:.+}") 
public String getTaskCheckLists(@PathParam("taskid") List<PathSegment> taskIdList) { 
    ...... 
} 

还有一个更广泛的示例here

+0

谢谢,这可能是最接近我会到达那个所以现在我只需要放在那里正则表达式匹配数字和斜杠example.com/ws/list/1或example.com/ws/list/1/2/3/4/5/6 – zeratul021 2010-09-10 12:47:50

2

我不会将此作为答案提交,因为它仅仅是currently accepted answer上的一个边缘案例,这也是我用过的。 在我的情况下(Jersey 1.19)/list/{taskid:.+}不适用于零变量参数的边缘情况。将RegEx更改为/list/{taskid:.*}已妥善处理。另见this article(这似乎是适用的)。

此外,在改变正则表达式的基数为指标来*(而不是+)我也只好空字符串的情况下,程序处理,我将在List<PathSegment>转化为List<String>(把它传递到我的数据库的访问码)。

我翻译从PathSegmentString的原因是我不希望javax.ws.rs.core包中的类污染我的数据访问层代码。

这里有一个完整的例子:

@Path("/listDirs/{dirs:.*}") 
@GET 
@Produces(MediaType.APPLICATION_JSON) 
public Response listDirs(@PathParam("dirs") List<PathSegment> pathSegments) { 
    List<String> dirs = new ArrayList<>(); 
    for (PathSegment pathSegment: pathSegments) { 
     String path = pathSegment.getPath(); 
     if ((path!=null) && (!path.trim().equals(""))) 
      dirs.add(pathSegment.getPath()); 
    } 
    List<String> valueFromDB = db.doSomeQuery(dirs); 
    // construct JSON response object ... 
} 
相关问题