泽西岛& Guice:如何为每个ServletModule指定基本路径?

时间:2015-06-18 19:50:37

标签: servlets jersey guice jersey-1.0 guice-servlet

问题取值)的

  • 如何定制泽西岛资源和ExceptionMapper,使其只响应某些路径子集的请求?
  • 如何在不提前决定我希望在以后主持的基础路径的情况下如何做到这一点?
  • 如何做到这一点,我可以从组合库中创建一个war,每个库都为Web应用程序的特定基本路径定义资源?

背景
我有一个Guice + Jersey v1 webapp,它从两个不同的依赖项(ServletModule s)加载两个jar
其中一个定义了其余API端点的资源(例如@Path("/purchases")@Path("/payment-methods")),另一个定义了Web UI的资源(例如@Path("/")@Path("/products"))。
前者ServletModule尝试将其泽西资源与"/api/"基本路径(serve("/api/*").with(GuiceContainer.class, conf);)联系起来,而后者则为"/"基本路径({{1} }})
两个依赖项也定义了自己的Jersey serve("/*").with(GuiceContainer.class, conf);; API的ExceptionMapper以JSON错误对象进行响应,而Web UI的ExceptionMapper在Freemarker的帮助下生成HTML响应。

然而,这种组合的结果 - 其中API和Web UI jar都在类路径上 - 是来自两个依赖项的Jersey资源响应具有以“/ api /”和<开头的路径的请求/ em>“/” 例如。 ExceptionMapper的API资源会响应/purchases http://example.com/api/purchases的请求。同样,http://example.com/purchases的网络用户界面资源会响应/products http://example.com/products的请求。

Jersey看到两个http://example.com/api/products用于相同的异常类型(例如ExceptionMapper)这一事实使得它只选择一个,无论请求的路径是从哪个开始。在我的情况下,NotFoundException会响应ExceptionMapper<NotFoundException>/api/下的未知资源请求,这对应用的任何一部分都不利。

0 个答案:

没有答案