匹配任何路径的 Jersey 资源

Jersey resource that matches any path

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

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

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


到目前为止,我已尝试绑定匹配 @Path("/")@Path("*")@Path("/*") 的资源,但是当我请求时,其中的 none 似乎已被拾取/some/path/that/doesnt/exist

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

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

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

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

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

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

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