Tomcat Servlet 4.0 JAX-RS Returns 404 错误

Tomcat Servlet 4.0 JAX-RS Returns 404 Error

当 运行 在 Eclipse 中使用 Tomcat 9.0.31 时,我无法 develop/test 我的 RESTful JAX-RS Web 服务。当我在 eclipse 中启动 tomcat 并尝试点击我编写的多个 JAX-RS wed 服务中的任何一个时,我收到 404 错误。这类测试我一般使用Fiddler打服务URL

我已经阅读了很多关于 SO 的帖子,包括但不限于:

等等。大多数响应似乎是针对 servlet 2.5 及更早版本的,并参考使用 web.xml.

中的 servlet 描述

我最近的服务都是有注释的,不需要在web.xml.

中添加任何内容

我的 web.xml 开头是

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
    http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    version="4.0">

我尝试过的东西很多。例如,我使用 OpenJDK 13 作为我的 java SDK,所以我将 eclipse 中的默认 JRE 更改为我的 OpenJDK 8 (1.8),但没有帮助。我已经完成了一些项目 clean/builds,以及 maven 项目更新。

我读过并且已经知道的一件事是在 web.xml header 中将 metadata-complete 属性设置为 false。那已经设置好了,所以我删除了它。还是不行。我尝试在我的 pom 中升级我的 Jersey Bundle 依赖版本,但没有用。

我确实尝试覆盖 getClasses() 方法

    @Override
    public Set< Class< ? > > getClasses() {

        final Set< Class< ? > > returnValue = new HashSet< Class< ? > >();
        returnValue.add( TestApi.class );
        return returnValue;
    }

这也没有用。请注意,每次更改后,我都会在 Eclipse 中停止并启动我的 Tomcat 服务器。

这里是相关信息:

Eclipse 项目方面:

上面的web.xmlheader我已经发过了

pom.xml:

<dependency>
    <groupId>org.glassfish.jersey.bundles</groupId>
    <artifactId>jaxrs-ri</artifactId>
    <version>2.32</version> <-- Note I was using version 2.29 this is the version I upgraded too.
</dependency>

申请子class:

package com.company;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath ( "resources" )
public class ApplicationConfig extends Application {}

测试Class:

package com.company;

import java.util.Date;

import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path ( "test" )
public class TestApi {

    @GET
    @Path ( "datetime" )
    public String getDate() {

        return new Date().toString();
    }
}

当我 运行 我的网络应用程序时,我希望能够通过调用 http://localhost:8080/resources/test/datetime 接收当前服务器 date/time。但是我收到 404 错误,消息只是“在此服务器上找不到请求的资源。此错误最常见的原因是输入错误的 URL 或损坏的 link”。 Eclipse 控制台中没有错误。

通常,当 Tomcat 启动时,我倾向于在 8080 协议启动消息后的启动输出中看到列出的每个服务,因为它被发现:

我卡住了,我需要检查最近对另一个 class 的更改,该更改在服务器上不起作用。

如何恢复此功能?

问题原来是 JAX-RS Project Facet 没有为该项目select编辑。

对于那些 运行 相同或相似的人,请在项目资源管理器中单击鼠标右键,假设使用的是 eclipse,然后 select“属性”。然后 select 左侧属性面板中的“Project Facets”。最后,选中“JAX-RS(REST Web 服务)”并将版本下拉列表设置为适当的实施版本。对于我的项目,我使用版本 2.1