是否可以使用可变数量的URI参数配置JAX-RS方法?

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

例如:

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

提前致谢

如果我正确理解您的问题,@ @Path注释可以采用正则表达式来指定路径组件的列表。 例如,类似于:

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

这里有一个更广泛的例子。

我不是将此作为答案提交,因为它仅仅是我目前接受的答案的一个边缘案例,这也是我所使用的。 在我的情况下(泽西岛1.19)/ /list/{taskid:.+}不适用于零变量参数的边缘情况。 将RegEx更改为/ /list/{taskid:.*} :。 /list/{taskid:.*}可以/list/{taskid:.*}这个问题。 另见本文 (似乎适用)。

此外,在将正则表达式更改为基数指示符为* (而不是+ )时,我还必须以编程方式处理空字符串的情况,因为我将List转换为List (将其传递到我的数据库中) -访问代码)。

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

这是一个完整的例子:

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