是否可以使用可变数量的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
(将其传递到我的数据库中) -访问代码)。
我从PathSegment
为String
的原因是我不希望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 ... }