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 的帖子,包括但不限于:
- JAX-RS on TomCat always returns 404
- 404 JAX-RS Tomcat,
MBeans?
- Jersey JAX-RS application returns 404
等等。大多数响应似乎是针对 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 项目方面:
- 动态网络模块 4.0
- Java1.8
- Java脚本 1.0
上面的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
当 运行 在 Eclipse 中使用 Tomcat 9.0.31 时,我无法 develop/test 我的 RESTful JAX-RS Web 服务。当我在 eclipse 中启动 tomcat 并尝试点击我编写的多个 JAX-RS wed 服务中的任何一个时,我收到 404 错误。这类测试我一般使用Fiddler打服务URL
我已经阅读了很多关于 SO 的帖子,包括但不限于:
- JAX-RS on TomCat always returns 404
- 404 JAX-RS Tomcat, MBeans?
- Jersey JAX-RS application returns 404
等等。大多数响应似乎是针对 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 项目方面:
- 动态网络模块 4.0
- Java1.8
- Java脚本 1.0
上面的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