如何为可变数量的路径参数编写单个JAX-RS资源

时间:2015-03-12 16:07:06

标签: java rest jax-rs apache-wink

我一直在使用Apache Wink编写基于JAX-RS的ReST应用程序,我理解了路径参数与资源句柄类之间的关联概念。在这里,我看到,我们可以使用@Path注释和相应的资源来定义路径,这些资源将基于HTTP方法进行调用。

现在我正在寻找类似资源的东西,应该调用可变数量的路径参数。

例如 我希望我的单个资源类CollegeResource应该像/rest/college, /rest/college/subject, /rest/college/subject/teachers, 这样的URI调用,它可以达到任意数量的路径参数。

如果我知道之前路径参数的数量,那么我可以使用类似/rest/college/{param1}/{param2}之类的东西来实现。但路径参数的数量是未知的。所以我觉得(我可能错了)不能使用这种方法。

我仍然可以使用的另一种方法是使用查询参数。但是我希望这只能作为路径参数。

有没有办法在任何其他配置下使用apache wink完成此操作?如果不是在Apache wink中,任何其他JAX-RS实现都支持这个吗?

1 个答案:

答案 0 :(得分:7)

您可以使用正则表达式,例如@Path("/college/{param: .*}"),然后使用List<PathSegment>作为方法参数。例如

@GET
@Path("/college/{params: .*}")
public Response get(@PathParam("params") List<PathSegment> params) {
    StringBuilder builder = new StringBuilder();
    for (PathSegment seg: params) {
        builder.append(seg.getPath());
    }
    return Response.ok(builder.toString()).build();
}
  

C:\>curl -v http://localhost:8080/college/blah/hello/world/cool
  结果: blahhelloworldcool

但就个人而言,我会远离这种事情。您的URI路径(模板)应该具有一些语义含义。允许任意数量的路径参数(可能没有任何意义)容易出错,并且IMO是重新设计的原因。在我提供任何建议之前,我需要知道这个设计选择背后的语义。