7

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

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

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

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

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

有没有办法使用 apache wink 和任何其他配置来完成这项工作?如果不在 Apache wink 中,任何其他 JAX-RS 实现都支持这个?

4

1 回答 1

9

您可以使用正则表达式,例如@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 是重新设计的原因。不过,在我提供任何建议之前,我需要了解这种设计选择背后的语义。

于 2015-03-13T01:15:51.107 回答