Eclipse+Tomcat开发Java Web REST API部署后接口访问404问题求助
问题根因与解决方案
根路径可正常访问说明项目部署上下文/queroquero配置无误,404是因为JAX-RS相关注解未被识别、REST服务未被正确加载,可按以下步骤逐一排查修复:
1. 补充JAX-RS实现依赖
你当前仅引入了JAX-RS的接口包,Tomcat作为Servlet容器本身不内置JAX-RS实现,所以无法识别相关REST注解,需要额外引入具体实现(以Jersey为例):
- 如果你使用的是Tomcat 10及以上版本(Jakarta EE命名空间),在pom.xml新增以下依赖:
<dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet-jakarta</artifactId> <version>3.1.5</version> </dependency> <dependency> <groupId>org.glassfish.jersey.inject</groupId> <artifactId>jersey-hk2</artifactId> <version>3.1.5</version> </dependency>
- 如果你使用的是Tomcat 9及以下版本(Java EE javax命名空间),需先把现有jakarta前缀的依赖全部替换为javax前缀,再新增以下依赖:
<dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>2.41</version> </dependency> <dependency> <groupId>org.glassfish.jersey.inject</groupId> <artifactId>jersey-hk2</artifactId> <version>2.41</version> </dependency>
2. 补充REST资源扫描配置
你当前的Main类和web.xml都没有配置资源扫描规则,JAX-RS无法识别到你写的VendedorResource类,可任选以下一种方式配置:
- 方式一:重写
Main类的getClasses方法手动注册资源
@ApplicationPath("rest") public class Main extends Application{ @Override public Set<Class<?>> getClasses() { Set<Class<?>> resources = new HashSet<>(); resources.add(VendedorResource.class); return resources; } }
- 方式二:在
web.xml中添加Jersey的Servlet配置和包扫描规则,以Tomcat 10为例:
<servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>你的VendedorResource类所在的包名</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping>
3. 额外校验项
- 检查Tomcat启动日志,确认没有类找不到、依赖冲突相关报错
- 清理Tomcat的
work、temp目录后重新打包部署,避免旧缓存导致的异常 - 解压打包好的war包,确认
/WEB-INF/lib目录下存在Jersey相关的依赖jar包
内容的提问来源于stack exchange,提问作者MoabR
相关产品推荐
相关产品推荐

