【问题标题】:Jersey resource that matches any path匹配任何路径的 Jersey 资源
【发布时间】:2015-06-14 21:23:55
【问题描述】:

我正在使用Jersey v1.xGuice Servlet。 我要做的是绑定一个匹配 any @Path 的 Jersey 资源,这样我就可以使用 Jersey 来响应 404。

我希望这样做,因为我的 servlet 由不同的组件组成(例如,位于 /api 下的 rest API 和位于 / 下的 Web UI。 在 Guice 术语中,这意味着我有几个 ServletModules,每个都设置了 servlet 的一部分:

  • 在我的ApiServletModuleserve("/api").with(GuiceContainer.class, conf)
  • 在我的WebUiServletModule:serve("/").with(GuiceContainer.class, conf)

在此设置中,我想从每个负责的子项目的代码库中为 webapp 的每个部分(/api/)定义 404 响应主体的外观,而无需重新实现 Jersey


到目前为止,我已尝试绑定与 @Path("/")@Path("*")@Path("/*") 匹配的资源,但当我请求 /some/path/that/doesnt/exist 时,这些资源似乎都没有被拾取

【问题讨论】:

    标签: java servlets guice jersey-1.0


    【解决方案1】:

    需要使用正则格式的路径表达式,即

    @Path("{any: .*}")
    

    如果需要,您可以注入 List<PathSegment> 来查看所有段。

    public Response getSomething(@PathParam("any") List<PathSegment> segments)
    

    【讨论】:

      【解决方案2】:

      @peeskilletanswer 确实是正确的,因为它描述了如何创建匹配任何路径的 Jersey 资源。
      但是,这个答案并没有完全满足我创建一个资源的目标,即每当请求任何其他不匹配的路径时都会提供 404 响应:

      至少结合 Guice,这种“匹配所有”资源是否会拦截所有请求,而不管是否有任何更具体的资源可用。此外,您不能从资源中修改 HTTP 响应状态代码。

      为此,Jersey 有 ExceptionMappers 可以通过添加 @Provider 注释来实现和加载。一种特定类型是ExceptionMapper&lt;NotFoundException&gt;,它在资源抛出NotFoundException 时被调用。然后ExceptionMapper 可以决定生成什么响应,包括状态码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多