1

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

我正在寻找这样做,因为我的 servlet 由不同的组件组成(例如,/api位于/.ServletModule小服务程序:

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

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


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

4

2 回答 2

10

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

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

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

public Response getSomething(@PathParam("any") List<PathSegment> segments)
于 2015-06-14T21:37:23.727 回答
3

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

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

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

于 2015-06-18T19:04:01.183 回答