我使用JAX-RS和Jersey启动了一个RESTful Web服务,它暴露了两个资源:SessionResource和ItemResource。遗憾的是,网络服务只暴露其中一个。
详细说明:
问题:
答案 0 :(得分:1)
多种解决方案之一是覆盖JAX-RS应用程序的getClasses()
。
@ApplicationPath("/")
public class MyApplication extends Application
{
@Override
public Set<Class<?>> getClasses()
{
return new HashSet<Class<?>>()
{
{
add(ResourceA.class);
add(ResourceB.class);
}
};
}
}
据我所知,最好不要依赖资源和提供者的自动检测。如果您有多个JAX-RS应用程序,有时会产生副作用。
答案 1 :(得分:0)
您可以在web.xml中执行此操作,然后您不需要Application类。
<servlet>
<servlet-name>JerseyStartup</servlet-name>
<servlet-class>[fully qualified name of a class that extends ServletContainer]</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.yourCompany</param-value>
</init-param>
</servlet>
然后它将自动检测com.yourCompany
及其子包中的所有类,这些类用@Path
注释,并将它们视为资源。