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

标签 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 实现支持此功能?

最佳答案

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

关于java - 如何为可变数量的路径参数编写单个 JAX-RS 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29014737/

相关文章:

java - 嵌入时监听 JOptionPane 事件?

java - Hazelcast LIKE/ILIKE 谓词/整数/长整型查询

java - WADL 生成工具

java - 实体模型或Pojo类作为REST API的返回对象

maven - 与 Maven 的 IncompatibleClassChangeError - Jersey - Tomcat

java - 跨语言(Java、C++、Python)系统使用哪个日志库

java - 二叉树仅在左侧添加节点。我怎样才能让它在根节点的左边和右边都工作?

java - 扩展 dotCMS REST API

json - 如何在 Apache Tomee plus 中使用 JAX-RS 为 JSON 设置读写提供程序

java - 是否可以上传 file.xlsx,处理它而不将其保存在服务器中?我正在使用 jaxrs