【问题标题】:Jersey 2.22: Where should I define the location of REST resources?Jersey 2.22:我应该在哪里定义 REST 资源的位置?
【发布时间】:2015-10-13 01:10:18
【问题描述】:
目前,我知道两种方法:
- 在您的 web.xml 上将其指定为
<init-param>
- 创建一个扩展
ResourceConfig 的类并将其添加到您的 web.xml 中
我有一个扩展 ResourceConfig 的类,因为我需要为依赖注入注册一个应用程序绑定器 (AbstractBinder)。
我应该在哪里定义 REST 资源的位置?这里的最佳做法是什么?
【问题讨论】:
标签:
java
rest
dependency-injection
resources
jersey
【解决方案1】:
在ResourceConfig中,你可以调用packages("reource.packages"),其作用与扫描<init-param>中声明的包相同
public class Config extends ResourceConfig {
public Config() {
packages("...");
register(new AbstractBinder()..);
}
}
要使用 Config 类,您有几个选择。
-
用@ApplicationPath("/appPath")注释它
有了这个,就不需要 web.xml。您需要确保您具有 jersey-container-servlet 依赖项才能使其正常工作。注释中的值的工作方式与 web.xml 中的 <servlet-mapping> 相同。
-
在 web.xml 中声明 Config 类
<servlet>
<servlet-name>MyApplication</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>org.foo.Config</param-value>
</init-param>
</servlet>
...
<servlet-mapping>
<servlet-name>MyApplication</servlet-name>
<url-pattern>/myPath/*</url-pattern>
</servlet-mapping>
您也可以不使用ResourceConfig 并在Feature 中注册活页夹,如here 所讨论的那样
另请参阅: