Servlets 泽西岛;Guice:如何为每个ServletModule指定基本路径?
问题(s):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”),
- 我如何定义Jersey资源和
s,使它们只响应特定路径子集的请求ExceptionMapper
- 我如何才能做到这一点,而不必提前决定我以后希望在什么基本路径下托管它们
- 如何做到这一点,使我可以从组合库中创建单个
,每个库都为web应用程序的特定基本路径定义资源war
我有一个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/outerExceptionMapper
实现“/api/”
和“/”
基本路径拆分,但这已经足够好了:)我仍然想知道的是如何防止Jersey资源响应“/”
基本路径下的请求,当它绑定在一个ServletModule
中时,该模块应该只配置“/api/”
basepath下的资源。在问题中的示例中,@Path(“/purchases”)
资源应该只响应/api/purchases
请求,但它也响应/purchases
——这仅仅是因为我有另一个servlet模块,它绑定了更多资源并在“/”下为它们提供服务。如果我需要添加一个更完整的代码片段来描述整个情况,请告诉我。我不确定我是否完全理解整个情况,但也许谢谢。将处理异常外观问题。它要求我的main/outerExceptionMapper
实现“/api/”
和“/”
基本路径拆分,但这已经足够好了:)我仍然想知道的是如何防止Jersey资源响应“/”
基本路径下的请求,当它绑定在一个ServletModule
中时,该模块应该只配置“/api/”
basepath下的资源。在问题中的示例中,@Path(“/purchases”)
资源应该只响应/api/purchases
请求,但它也响应/purchases
——这仅仅是因为我有另一个servlet模块,它绑定了更多资源并在“/”下为它们提供服务。如果我需要添加一个更完整的代码片段来描述整个情况,请告诉我。我不确定我是否完全理解整个情况,但也许谢谢。将处理异常外观问题。它要求我的main/outerExceptionMapper
实现“/api/”
和“/”
基本路径拆分,但这已经足够好了:)我仍然想知道的是如何防止Jersey资源响应“/”
基本路径下的请求,当它绑定在一个ServletModule
中时,该模块应该只配置“/api/”
basepath下的资源。在问题中的示例中,@Path(“/purchases”)
资源应该只响应/api/purchases
请求,但它也响应/purchases
——这仅仅是因为我有另一个servlet模块,它绑定了更多资源并在“/”下为它们提供服务。如果我需要添加更完整的代码片段来描述整个情况,请告诉我。