如何为可变数量的路径参数编写单个 JAX-RS 资源
How to write single JAX-RS resource for variable number of path parameters
我一直在使用 Apache Wink 编写基于 JAX-RS 的 ReST 应用程序,我了解路径参数与资源句柄之间关联的概念 class。在这里我看到,我们可以使用 @Path
注释和相应的资源定义路径,这些资源将基于 HTTP 方法被调用..
现在我正在寻找类似资源的东西,应该为可变数量的路径参数调用它。
例如
我希望我的单个资源 class CollegeResource
应该为像 /rest/college, /rest/college/subject, /rest/college/subject/teachers,
这样的 URI 调用,它可以达到任意数量的路径参数。
如果我之前知道路径参数的数量,那么我可以使用类似 /rest/college/{param1}/{param2}
的方式实现此目的。但是路径参数的数量是未知的。所以我觉得(我可能是错的)不能用这种方法。
我仍然可以使用的另一种方法是使用查询参数。但我希望它仅可用作路径参数。
有没有什么方法可以在任何其他配置下使用 apache wink 来完成这项工作?如果不在 Apache wink 中,是否有任何其他 JAX-RS 实现支持此功能?
您可以使用正则表达式,例如 @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
Result: blahhelloworldcool
但就我个人而言,我会远离这种事情。你的 URI 路径(模板)应该有一些语义。允许任意数量的路径参数(可能没有任何意义)容易出错,而 IMO 是重新设计的原因。不过,在我提供任何建议之前,我需要了解此设计选择背后的语义。
我一直在使用 Apache Wink 编写基于 JAX-RS 的 ReST 应用程序,我了解路径参数与资源句柄之间关联的概念 class。在这里我看到,我们可以使用 @Path
注释和相应的资源定义路径,这些资源将基于 HTTP 方法被调用..
现在我正在寻找类似资源的东西,应该为可变数量的路径参数调用它。
例如
我希望我的单个资源 class CollegeResource
应该为像 /rest/college, /rest/college/subject, /rest/college/subject/teachers,
这样的 URI 调用,它可以达到任意数量的路径参数。
如果我之前知道路径参数的数量,那么我可以使用类似 /rest/college/{param1}/{param2}
的方式实现此目的。但是路径参数的数量是未知的。所以我觉得(我可能是错的)不能用这种方法。
我仍然可以使用的另一种方法是使用查询参数。但我希望它仅可用作路径参数。
有没有什么方法可以在任何其他配置下使用 apache wink 来完成这项工作?如果不在 Apache wink 中,是否有任何其他 JAX-RS 实现支持此功能?
您可以使用正则表达式,例如 @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
Result:blahhelloworldcool
但就我个人而言,我会远离这种事情。你的 URI 路径(模板)应该有一些语义。允许任意数量的路径参数(可能没有任何意义)容易出错,而 IMO 是重新设计的原因。不过,在我提供任何建议之前,我需要了解此设计选择背后的语义。