当前位置: 首页 > 知识库问答 >
问题:

为什么我得到404错误消息“找不到”在获取请求我的泽西Rest服务?

方永贞
2023-03-14

我实际上有一个类似的问题,正如这里所描述的,JAX-RS资源在GlassFish服务器中找不到的那样。既然人们不应该在答案中寻求帮助,我就提出一个新的问题。

我创建了一个名为“spcore”的项目,它是一个简单的RESTful WebService。它使用jax-rs库、jdk 11和Tomcat 9.0.44服务器。我在webapps文件夹中有一个index.html,它显示Hello World。上下文路径设置为/sp-core。如果调用localhost:8080/sp-core,将返回index.html文件。所以这是有效的。

我有一些资源(我将只显示一个作为示例)。当GET请求到来时,资源“ProcessEventResource”应该以纯文本形式返回“Hello World”。路径设置为@path(“processevent”)。可悲的是,当我调用localhost:8080/sp-core/processevent时,我得到了一个错误404

添加了一个子类应用程序,如更新后的answer JAX-RS资源中提到的,在GlassFish服务器中找不到。但是,当调用localhost:8080/sp-core/api/rest/processevent时,仍然会出现404错误

我假设servlets或路径中的某些东西不能正常工作。

在下面,我将提供我的项目结构、pom文件、资源和应用程序类。我剪切了一些小的部分(包名、group-id、...),这些部分指的是我工作的公司。如果你需要更多的信息,请告诉我。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<artifactId>sp-core</artifactId>
<version>1.0-SNAPSHOT</version>
<name>sp-core</name>
<packaging>war</packaging>

<properties>
    <maven.compiler.target>11</maven.compiler.target>
    <maven.compiler.source>11</maven.compiler.source>
</properties>

<dependencies>
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.1.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20210307</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.3.0</version>
        </plugin>
    </plugins>
</build>
@Path("processEvent")
@Provider
public class ProcessEventResource {

    public ProcessEventResource(){
    }

    @GET
    @Produces("text/plain")
    public String processEvent() {
        return "Hello, World!";
    }
}
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/api/rest")
public class RestApplication extends Application {

}

我希望在调用localhost:8080/sp-core/api/rest/processevent时得到hello world响应

提前感谢您的帮助和时间。

+++++++++++++++++++更新++++++++++++++++++++

<name>sp-core</name>
<packaging>war</packaging>

<properties>
    <maven.compiler.target>11</maven.compiler.target>
    <maven.compiler.source>11</maven.compiler.source>
</properties>

<dependencies>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>2.33</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.33</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.inject</groupId>
        <artifactId>jersey-hk2</artifactId>
        <version>2.33</version>
    </dependency>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20210307</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.3.0</version>
        </plugin>
    </plugins>
</build>
<display-name>sp-core</display-name>

<servlet>
    <servlet-name>RestServlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>RestServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
<init-param>
    <param-name>javax.ws.rs.core.Application</param-name>
    <param-value>abc.de.fg.SPCore.RestApplication</param-value>
</init-param>

错误消息仍然相同。

共有1个答案

丁曦
2023-03-14

在阅读了许多stackoverflow问题、JAX-RS docu和maven docu之后,我终于完成了任务。所以我最终会展示我所做的。

正如我在第一次更新中所写的那样,我添加了一个web.xml文件,该文件最终如下所示。

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <display-name>sp-core</display-name>
    <servlet>
        <servlet-name>restServlet</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>abc.de.fg.sp_core.RestApplication</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>restServlet</servlet-name>
        <url-pattern>/api/rest/*</url-pattern>
    </servlet-mapping>
</web-app>

请注意,应用程序的param名称是javax.ws.rs.application,而不是文档中所说的javax.ws.rs.core.application(请始终阅读注释...)。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>abc.de.fg</groupId>
    <artifactId>sp-core</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>sp-core</name>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.target>11</maven.compiler.target>
        <maven.compiler.source>11</maven.compiler.source>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>2.33</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.inject</groupId>
            <artifactId>jersey-hk2</artifactId>
            <version>2.33</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20210307</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.0</version>
            </plugin>
        </plugins>
    </build>
</project>
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;

@ApplicationPath("/*")
public class RestApplication extends Application {
    public RestApplication() {
    }

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> s = new HashSet<Class<?>>();
        s.add(ProcessEventResource.class);
        return s;
    }

}
 类似资料:
  • URL类 来自服务器的最终响应:

  • 问题内容: 我是学习Flask的Django开发人员。我对Flask中的工作方式还很陌生。访问时,我得到的404包含以下代码。有人可以解释为什么我得到这个: 在服务器上找不到请求的URL。如果你手动输入网址,请检查拼写,然后重试。 问题答案: 你在注册处理程序之前先打电话。你应该将整个块移到脚本的底部。

  • 我试图将我的Springmvc项目转换为Spring启动。我根据Spring启动转换了所有必要的文件。控制台上没有错误。但是当我在浏览器中运行我的网络应用程序时,我得到了这个错误。 在名为“DispatcherServlet”的DispatcherServlet中找不到URI为[/onlineshopping/WEB-INF/views/page.jsp]的HTTP请求的映射 我尝试运行的任何ur

  • 我开始使用tomcat服务器在eclipse ide中做一个项目。所以很明显我在JSP和servlet中没有得到任何错误。但我没有得到任何输出,它显示404错误,没有任何消息 下面是我尝试的方法:卸载并重新安装tomcat服务器,将web.xml文件设置为正确的路径,导入所有java文件,更改tomcat-users.xml代码

  • 很抱歉,我对Java知之甚少。我得到了这个代码来接管。基本上,我在 当我运行代码时。 下面是解析XML的块 这是Improts,不确定是否需要这样做 这是XML文件

  • 我刚刚开始了一个新的项目,正在尝试连接到FireBase。当我试图构建我的项目时,我得到了一个错误:无法解析Android应用程序模块的Gradle配置,所以我查看了构建,它告诉我jCenter()不推荐使用,我应该删除它。当我把它取下来的时候,一切都很好。但是,当我尝试连接到Firebase时,我得到了错误:AbstractDynamicObject$CustomMessageMissingMe