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

Servlets 泽西岛;Guice:如何为每个ServletModule指定基本路径?,servlets,jersey,guice,jersey-1.0,guice-servlet,Servlets,Jersey,Guice,Jersey 1.0,Guice Servlet,问题(s): 我如何定义Jersey资源和ExceptionMappers,使它们只响应特定路径子集的请求 我如何才能做到这一点,而不必提前决定我以后希望在什么基本路径下托管它们 如何做到这一点,使我可以从组合库中创建单个war,每个库都为web应用程序的特定基本路径定义资源 背景: 我有一个Guice+Jersey v1 webapp,它从两个不同的依赖项(jars)加载两个ServletModules) 其中一个定义rest API端点的资源(例如@Path(“/purchases”),

问题s

  • 我如何定义Jersey资源和
    ExceptionMapper
    s,使它们只响应特定路径子集的请求
  • 我如何才能做到这一点,而不必提前决定我以后希望在什么基本路径下托管它们
  • 如何做到这一点,使我可以从组合库中创建单个
    war
    ,每个库都为web应用程序的特定基本路径定义资源
背景:
我有一个Guice+Jersey v1 webapp,它从两个不同的依赖项(
jar
s)加载两个
ServletModule
s) 其中一个定义rest API端点的资源(例如
@Path(“/purchases”)
@Path(“/payment methods”)
),另一个定义web UI的资源(例如
@Path(“/”)
@Path(“/products”)
) 前者的
ServletModule
尝试将其Jersey资源绑定到
“/api/”
基本路径(
service(/api/*”).with(GuiceContainer.class,conf);
),而后者对
“/”
基本路径(
service(“/*”);with(GuiceContainer.class,conf)

这两个依赖项还定义了它们自己的Jersey
ExceptionMapper
s;API的
ExceptionMapper
s使用JSON错误对象进行响应,而web UI的
ExceptionMapper
s使用Freemarker生成HTML响应

然而,这种组合的结果——API和web UI JAR都位于类路径上——是来自这两个依赖项的资源响应路径以“/API/”和“/”开头的请求
例如,
/purchases
的API资源响应
http://example.com/api/purchases
http://example.com/purchases
。类似地,
/products
的web UI资源响应
http://example.com/products
http://example.com/api/products


Jersey为同一异常类型(例如,
NotFoundException
)看到两个
ExceptionMapper
)这一事实使得它只选择一个,而不管请求的路径以什么开头。在我的例子中,
exceptionapper
响应
/api/
/
下的未知资源请求,这对应用程序的任何一部分都不好。

我不确定我是否完全理解整个情况,但可能需要感谢。将处理异常外观问题。它要求我的main/outer
ExceptionMapper
实现
“/api/”
“/”
基本路径拆分,但这已经足够好了:)我仍然想知道的是如何防止Jersey资源响应
“/”
基本路径下的请求,当它绑定在一个
ServletModule
中时,该模块应该只配置
“/api/”
basepath下的资源。在问题中的示例中,
@Path(“/purchases”)
资源应该只响应
/api/purchases
请求,但它也响应
/purchases
——这仅仅是因为我有另一个servlet模块,它绑定了更多资源并在
“/”下为它们提供服务。如果我需要添加一个更完整的代码片段来描述整个情况,请告诉我。我不确定我是否完全理解整个情况,但也许谢谢。将处理异常外观问题。它要求我的main/outer
ExceptionMapper
实现
“/api/”
“/”
基本路径拆分,但这已经足够好了:)我仍然想知道的是如何防止Jersey资源响应
“/”
基本路径下的请求,当它绑定在一个
ServletModule
中时,该模块应该只配置
“/api/”
basepath下的资源。在问题中的示例中,
@Path(“/purchases”)
资源应该只响应
/api/purchases
请求,但它也响应
/purchases
——这仅仅是因为我有另一个servlet模块,它绑定了更多资源并在
“/”下为它们提供服务。如果我需要添加一个更完整的代码片段来描述整个情况,请告诉我。我不确定我是否完全理解整个情况,但也许谢谢。将处理异常外观问题。它要求我的main/outer
ExceptionMapper
实现
“/api/”
“/”
基本路径拆分,但这已经足够好了:)我仍然想知道的是如何防止Jersey资源响应
“/”
基本路径下的请求,当它绑定在一个
ServletModule
中时,该模块应该只配置
“/api/”
basepath下的资源。在问题中的示例中,
@Path(“/purchases”)
资源应该只响应
/api/purchases
请求,但它也响应
/purchases
——这仅仅是因为我有另一个servlet模块,它绑定了更多资源并在
“/”下为它们提供服务。如果我需要添加更完整的代码片段来描述整个情况,请告诉我。