我不会将此作为答案提交,因为它仅仅是currently accepted answer上的一个边缘案例,这也是我用过的。 在我的情况下(Jersey 1.19)/list/{taskid:.+}
不适用于零变量参数的边缘情况。将RegEx更改为/list/{taskid:.*}
已妥善处理。另见this article(这似乎是适用的)。
此外,在改变正则表达式的基数为指标来*
(而不是+
)我也只好空字符串的情况下,程序处理,我将在List<PathSegment>
转化为List<String>
(把它传递到我的数据库的访问码)。
我翻译从PathSegment
到String
的原因是我不希望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 ...
}
谢谢,这可能是最接近我会到达那个所以现在我只需要放在那里正则表达式匹配数字和斜杠example.com/ws/list/1或example.com/ws/list/1/2/3/4/5/6 – zeratul021 2010-09-10 12:47:50