问题(s):
- 如何定义 Jersey 资源和
ExceptionMapper
s,使其仅响应对特定路径子集的请求? - 我怎样才能做到这一点,而不必提前决定以后要在什么基本路径下托管它们?
- 如何做到这一点,以便我可以
war
通过组合库创建单个库,每个库都为 Web 应用程序的特定基本路径定义资源?
背景:
我有一个 Guice + Jersey v1 webapp,它ServletModule
从两个不同的依赖项(jar
s)加载两个 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);
ExceptionMapper
ExceptionMapper
ExceptionMapper
然而,这种组合的结果——API 和 Web UI jar 都在类路径上——是来自两个依赖项的 Jersey 资源响应具有以“/api/”和“/”开头的路径的请求。
例如,用于/purchases
响应 和 的请求http://example.com/api/purchases
的 http://example.com/purchases
API 资源。同样,Web UI 资源响应和/products
的请求。http://example.com/products
http://example.com/api/products
Jersey 看到两个ExceptionMapper
s 表示相同的异常类型(例如NotFoundException
)这一事实使它只选择一个,而不管请求的路径以什么开头。就我而言,和ExceptionMapper<NotFoundException>
下都响应未知资源请求,这对应用程序的任何部分都不利。/api/
/