我正在开发一项网络服务,我得到了一个非常奇怪的错误。
这是我的web.xml
:
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>service</param-value>
</init-param>
据我所知,<param-value>
必须被引用到我的主要应用程序包中。但是,我的应用程序位于rest.main
包中,但Web服务仅适用于上面定义的service
值。
问题是什么,有人可以解释一下这些问题吗?
答案 0 :(得分:4)
查看有关documentation配置属性的jersey.config.server.provider.packages
:
定义一个或多个包含特定于应用程序的资源和提供程序的程序包。如果设置了该属性,则将扫描指定的包以查找JAX-RS根资源和提供程序。
此web.xml
部署描述符中经常使用此设置来指示Jersey扫描这些包并自动注册所有找到的资源和提供程序:
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>
org.foo.myresources,org.bar.otherresources
</param-value>
</init-param>
使用此设置,Jersey将自动发现所选包中的资源和提供程序。默认情况下,Jersey也会递归扫描子包。
对于Servlet 3.x容器,根本不需要web.xml
。相反,可以使用@ApplicationPath
注释来注释自定义Application
或ResourceConfig
子类,并为应用程序中配置的所有JAX-RS资源定义基本应用程序URI。
使用以下命令定义要扫描的包:
@ApplicationPath("resources")
public class MyApplication extends ResourceConfig {
public MyApplication() {
packages("org.foo.myresources,org.bar.otherresources");
}
}
有关详细信息,请查看Jersey文档的deployment section。
,
或;
作为分隔符。答案 1 :(得分:1)
If the application consists only resources and providers stored in particular packages, Jersey can scan them and register automatically.
<web-app>
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>org.foo.rest;org.bar.rest</param-value>
</init-param>
...
</servlet>
...
</web-app>
The param-value refers to the packages which will be scanned automatically.
答案 2 :(得分:0)
您只需要将包名称添加到
如果将我的资源类放在com.ft.resources包中,请形成示例 然后我必须在其中添加包名称
<init-param>
<!-- For Jersey 2.x -->
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.ft.resources</param-value>
</init-param>
希望这可以解决您的问题