1

问题s

  • 如何定义 Jersey 资源和ExceptionMappers,使其仅响应对特定路径子集的请求?
  • 我怎样才能做到这一点,而不必提前决定以后要在什么基本路径下托管它们?
  • 如何做到这一点,以便我可以war通过组合库创建单个库,每个库都为 Web 应用程序的特定基本路径定义资源?

背景:
我有一个 Guice + Jersey v1 webapp,它ServletModule从两个不同的依赖项(jars)加载两个 s。
其中一个定义了其他 API 端点的资源(例如@Path("/purchases"), @Path("/payment-methods")),另一个定义了 Web UI 的资源(例如@Path("/"), @Path("/products"))。前者尝试将其 Jersey 资源绑定到
基本路径 ( ), 而后者对基本路径 ( ) 进行等效的操作。API以 JSON 错误对象响应,而 Web UI在 Freemarker 的帮助下生成 HTML 响应。ServletModule"/api/"serve("/api/*").with(GuiceContainer.class, conf);"/"serve("/*").with(GuiceContainer.class, conf);
ExceptionMapperExceptionMapperExceptionMapper

然而,这种组合的结果——API 和 Web UI jar 都在类路径上——是来自两个依赖项的 Jersey 资源响应具有以“/api/”“/”开头的路径的请求。
例如,用于/purchases响应 和 的请求http://example.com/api/purchases http://example.com/purchasesAPI 资源。同样,Web UI 资源响应/products的请求。http://example.com/products http://example.com/api/products

Jersey 看到两个ExceptionMappers 表示相同的异常类型(例如NotFoundException)这一事实使它只选择一个,而不管请求的路径以什么开头。就我而言,和ExceptionMapper<NotFoundException>下都响应未知资源请求,这对应用程序的任何部分都不利。/api//

4

0 回答 0