匹配任何路径的 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 术语中,这意味着我有几个 ServletModule
s,每个都设置了 servlet 的一部分:
- 在我的
ApiServletModule
中:serve("/api").with(GuiceContainer.class, conf)
- 在我的
WebUiServletModule
中:serve("/").with(GuiceContainer.class, conf)
在此设置中,我想从负责的每个子项目的代码库中为 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
然后可以决定生成什么响应,包括状态代码。
我正在使用 Jersey v1.x and a Guice Servlet。
我想要做的是绑定一个匹配 any @Path
的 Jersey 资源,这样我就可以使用 Jersey 来响应 404.
我想这样做,因为我的 servlet 由不同的组件组成(例如,位于 /api
下的 rest API 和位于 UI 下的网络 UI =12=]。
在 Guice 术语中,这意味着我有几个 ServletModule
s,每个都设置了 servlet 的一部分:
- 在我的
ApiServletModule
中:serve("/api").with(GuiceContainer.class, conf)
- 在我的
WebUiServletModule
中:serve("/").with(GuiceContainer.class, conf)
在此设置中,我想从负责的每个子项目的代码库中为 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
但是,我的目标是创建一个资源,每当请求任何其他不匹配的路径时都提供 404 响应,这个答案并没有完全满足:
至少与 Guice 结合使用时,这种 "match all" 资源会拦截所有请求,而不管是否有任何更具体的资源可用。此外,您不能从资源中修改 HTTP 响应状态代码。
为此,Jersey 有 ExceptionMapper
可以通过添加 @Provider
注释来实现和加载。一种特定类型是 ExceptionMapper<NotFoundException>
,它在资源抛出 NotFoundException
时被调用。 ExceptionMapper
然后可以决定生成什么响应,包括状态代码。