当前位置: 首页 > 知识库问答 >
问题:

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

戚令秋
2023-03-14

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

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

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

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

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

有没有办法在使用ApacheWink和其他配置时实现这一点?如果不是在ApacheWink中,还有其他JAX-RS实现支持这一点吗?

共有1个答案

韦飞尘
2023-03-14

您可以使用正则表达式,如@Path("/College/{参数: .*}"),然后使用List

@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:\

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

 类似资料:
  • 我需要将带有多个可选参数的路径映射到我的endpoint

  • 问题内容: 可以做这样的事情吗? 我正在使用RESTEasy。 问题答案: 是的,您可以这样做,尽管您将必须重命名方法,以使它们的签名不同。 更新: 检查Dieter Cailliau的答案, 可能是您想要的… 您可以在其中检查JSR-311的API及其参考实现,名称为“ jersey”: JSR311 API 泽西岛

  • 问题内容: 我正在尝试使用HttpServletRequest从发布的表单中检索传递给jax- rs的一些参数。但是,我的请求对象始终为我的参数返回空值。我不是要这样做吗?我已经在下面发布了代码,并发送了示例请求。 这是我的服务: 请求示例: 问题答案:

  • 问题内容: 是否可以配置GET方法以读取可变数量的URI参数并将其解释为可变参数(数组)或集合?我知道查询参数可以读取为列表/设置,但在我的情况下我无法使用它们。 例如: 提前致谢 问题答案: 如果我正确理解了您的问题,则注释可以采用正则表达式来指定路径组件列表。例如,类似: 还有一个更广泛的例子在这里。

  • 我创建了一个原型为maven archetype webapp的maven项目,然后为了将我的应用程序公开为rest webservice,我正在使用RestEasy,但是在rest应用程序中实现后,我无法访问我创建的URL。请告诉我我做错了什么。感谢您阅读此问题。 我的UserManagementController如下: 我的MyRestWS. java如下: 我的网站。xml如下: 该应用程

  • 问题内容: 使用JAX-RS和(java8)时出现问题。 我想使用JSON将这样的对象传递到JAX-RS方法中: 我得到的异常是: :没有合适的构造找到型[简单的类型,类在[来源不能实例从JSON对象(需要添加/启用类型信息)::] ; 行:2,列:3] 如何创建某种将json-dates映射到的拦截器?我尝试实现a ,但是如果is是另一个类中的 字段 ,则我必须为每个持有a的类编写一个(据我所知