JavaTomcatServlet4.0JAXRS返回404错误
在Eclipse中使用Tomcat9.0.31运行时,我已经失去了开发/测试RESTful JAX-RSWeb服务的能力。当我在eclipse中启动tomcat并尝试点击我编写的许多JAX-RSWED服务中的任何一个时,我收到一个404错误。对于这种类型的测试,我通常使用Fiddler点击服务URL
我已经阅读了这里的一些帖子,包括但不限于:
- JAX-RS on TomCat always returns 404
- 404 on JAX-RS on Tomcat, MBeans?
- Jersey JAX-RS application returns 404
还有更多。大多数响应似乎都是针对Servlet2.5和更早版本的,并提到在web中使用servlet描述。xml
我最近的服务都有注释,我不需要向web添加任何内容。xml
我的网络。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),这没有帮助。我已经完成了许多项目清理/构建和maven项目更新
我读过并且已经知道的一件事是在web中将metadata-complete
属性设置为false。xml头。已经设置好了,所以我将其删除。还是不行。我尝试在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模块4.0
- Java 1.8
- JavaScript 1.0
我已经在网上发布了。上面的xml头
波姆。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>
应用程序子类:
package com.company;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath ( "resources" )
public class ApplicationConfig extends Application {}
测试等级:
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();
}
}
当我运行我的web应用程序时,我希望能够通过调用http://localhost:8080/resources/test/datetime.但是我得到了一个404错误,消息只是“在这个服务器上找不到请求的资源。这个错误通常是由键入错误的URL或断开的链接引起的”。Eclipse控制台中没有错误
通常,当Tomcat启动时,我倾向于看到在8080协议启动消息之后的启动输出上列出的每个服务:
我被卡住了,我需要检查最近对另一个类的更改,该类在服务器上不工作
如何恢复此功能
# 1 楼答案
问题是没有为项目选择JAX-RS项目方面
对于那些遇到相同或类似问题的人,假设使用eclipse,在项目浏览器中单击鼠标右键,然后选择“属性”。然后从属性的左侧面板中选择“项目面”。最后,选中“JAX-RS(RESTWeb服务)”并将版本下拉列表设置为适当的实现版本。对于我的项目,我使用版本2.1