JAX-RS和Jersey - 只有一个暴露的资源

时间:2011-06-21 16:14:38

标签: web-services jersey jax-rs

我使用JAX-RS和Jersey启动了一个RESTful Web服务,它暴露了两个资源:SessionResource和ItemResource。遗憾的是,网络服务只暴露其中一个。

详细说明:

  • 使用扩展javax.ws.rs.core.Application(由Netbeans 7自动创建)的类完成配置。除了@ApplicationPath()注释之外,该类不包含任何配置信息。
  • 没有web.xml文件

问题:

  • 我缺少什么?
  • 是否有申请类的价值?我可以离开w /只是一个web.xml文件进行配置吗?
  • 有时我注意到IDE中所做的更改不会发布到apache。什么是最可靠的方式?

2 个答案:

答案 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注释,并将它们视为资源。