尝试使用Jersey创建REst服务

时间:2013-04-26 08:28:41

标签: java rest maven jersey

我正在关注this教程,使用Jersey创建一个REst服务。

有时我无法完全理解教程的作者的意思,但这些是我到目前为止所遵循的步骤:

1) 创建了一个动态网络项目并将其命名为 de.vogella.jersey.first

2) 在eclipse上安装了Maven依赖项

3) 将我的项目转换为Maven项目(这意味着创建了一个pom.xml文件)

4) pom.xml中添加了必要的依赖项,以便我可以使用jersey而无需手动添加jar文件。我添加了以下xml:

<dependencies>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.17.1</version>
    </dependency>
</dependencies>

5) 作者建议创建一个java类并提供一些代码。我只能假设他希望我们在src文件夹中创建一个新包,将其命名为de.vogella.jersey.first,然后创建一个java类并将其命名为Hello并将代码放在那里。那是我做的。

6) 然后他建议打开web.xml文件。虽然在项目中不是这样的文件。所以我继续在WebContent/WEB-INF/lib路径中创建这样一个文件。我放置了他建议的代码。

7) 接下来是我最不理解的一步。他谈到了我们刚刚添加的web.xml,更具体地说他说:

“参数”com.sun.jersey.config.property.package“定义了jersey将在哪个包中查找Web服务类。此属性必须指向您的资源类。” < / p>

8) 最后一步是在浏览器中打开网址http://localhost:8080/de.vogella.jersey.first/rest/hello。但是我得到了HTTP Status 404 - /de.vogella.jersey.first/rest/hello


我应该完全取代com.sun.jersey.config.property.package

我现在所遵循的步骤是正确的,还是我误解了什么?

2 个答案:

答案 0 :(得分:11)

只需将属性com.sun.jersey.config.property.package设置为包含Web服务类的包。在教程中它是de.vogella.jersey.first,您可以看到Hello类是在该包下声明的。

换句话说,当您部署应用程序时,Jersey将在包de.vogella.jersey.first中查找Web服务类,在这种情况下,它将查找使用{{1}声明的类Hello注释,并创建一个侦听已使用javax.ws.rs.Path声明的URL的Web服务端点。

但是,我从来没有为我的泽西项目设置过这样的东西。我只是将我的Web服务类放在@Path文件夹中,无论我把它放在哪个包中,Jersey都会识别它们。这是我在src中对泽西项目的最低配置:

web.xml

此外,如果您不喜欢Maven项目,只需创建一个简单的动态Web项目并将Jersey JARs复制到<servlet> <description>JAX-RS Tools Generated - Do not modify</description> <servlet-name>JAX-RS Servlet</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <!-- <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>com.your.webservice.classes</param-value> </init-param> --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>JAX-RS Servlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>

此外,正如Qwerky建议的那样,WebContent/WEB-INF/lib必须在web.xml中,并且WebContent/WEB-INF/文件应该复制到.jar

除此之外,描述的程序看起来很好!

答案 1 :(得分:10)

如果您使用的是Jersey 2,则此类已被jersey.config.server.provider.packages替换,因此您的资源配置如下:

<init-param>
  <param-name>jersey.config.server.provider.packages</param-name>
  <param-value>de.vogella.jersey.todo.resources</param-value>
</init-param>