REST与JAX-RS Tomcat服务器返回“请求的资源不可用”

时间:2018-08-27 06:59:23

标签: rest api tomcat jax-rs

我正在简短tutorial上介绍如何使用JAX-RS创建REST api。我正在使用Tomcat服务器v7.0。当我在服务器上运行应用程序时,出现错误404请求的资源不可用。 该项目基于Maven,我的pom.xml文件包含以下行

  <properties>
    <failOnMissingWebXml>false</failOnMissingWebXml>
 </properties>

因此,我没有web.xml文件。这就是本教程的实现方式。我没有index.html / jsp文件。我创建了两个类RESTconfig.javaBookResources.java

...import statements 
@ApplicationPath("api")
public class RESTconfig extends Application {

}

...import statements
@Path("books")
public class BookResources {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String books() {
        return "Hello world";
    }
}

我的pom.xml文件看起来像这样

<groupId>com.dere</groupId>
  <artifactId>myrest</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
    <properties>
    <failOnMissingWebXml>false</failOnMissingWebXml>
  </properties>
  <dependencies>
  <dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
 </dependency>

一旦我在服务器上运行该应用程序并转到http://localhost:9090,我就能看到Tomcat主页,但是如果尝试获取数据http://localhost:9090/myrest/api/books,则会收到404错误,即请求的资源不正确可用,我在上面提到过。 我在网上看到的大多数示例或用法都涉及使用web.xml并提供应用程序的根目录和servlet。这是我第一次接触构建REST API。我可能误会了整个事情,或者我跳过了一些步骤。期待您的帮助。 我正在将Eclipse Photon用于Java EE

1 个答案:

答案 0 :(得分:1)

看看这个

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
</dependency>

这基本上不过是EE规范的一堆接口。没有实现。 Java EE服务器将具有实现。 Tomcat不是EE服务器。肯定会实现的EE规范的唯一部分是Servlets和JSP(Web配置文件)。如果要使用EE服务器,请签出Glassfish或Wildfly。

您正在尝试使用JAX-RS规范,Tomcat肯定在默认情况下没有实现。因此,您需要添加该实现。最容易实现的IMO是泽西岛。您可以简单地添加此依赖项

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.25.1</version>
</dependency>

,它将使您启动并运行。随身携带Jersey User Guide。它将投入使用。