代码之家  ›  专栏  ›  技术社区  ›  zeratul021

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

  •  10
  • zeratul021  · 技术社区  · 14 年前

    是否可以将get方法配置为读取可变数量的uri参数,并将其解释为变量参数(数组)或集合?我知道查询参数可以作为列表/集合读取,但在我的例子中我不能使用它们。

    例如。:

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

    提前谢谢

    2 回复  |  直到 8 年前
        1
  •  9
  •   Dave Ray    14 年前

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

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

    有一个更广泛的例子 here .

        2
  •  3
  •   Community CDub    7 年前

    我不会将此作为答案提交,因为它只是 currently accepted answer 我也用过。 就我而言(泽西1.19) /list/{taskid:.+} 不适用于零变量参数的边缘情况。将regex更改为 /list/{taskid:.*} 处理好了。也见 this article (似乎适用)。

    此外,在将regexp更改为基数指示器时, * 而不是 + )我还必须以编程方式处理空字符串的情况,因为我要翻译 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 ...
    }