You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GET请求调用JAX-RS服务返回404无响应问题如何排查

JAX-RS服务在Tomcat 9返回404的常见原因及解决方案

核心触发原因

Tomcat 9是轻量级Servlet容器,本身未内置JAX-RS规范的实现(如Jersey、RestEasy),没有对应实现的情况下,你写的JAX-RS注解不会被容器识别加载,直接返回404是普遍情况。

其他可能的错误点

  • 1. 遗漏JAX-RS实现依赖

    以常用的Jersey实现为例,如果你用Maven管理依赖,需要在pom.xml中引入适配Servlet环境的Jersey包:
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.41</version> <!-- 适配Tomcat9+Java EE 8的版本,不要用3.x以上的jakarta版本 -->
    </dependency>
    
    如果是手动导入jar包,需要把Jersey相关的所有依赖包放到项目的WEB-INF/lib目录下。
  • 2. 访问路径遗漏应用上下文

    Tomcat部署war包时,默认上下文路径就是war包的文件名,比如你的项目打包为jaxrs-demo.war,正确的访问地址应该是:
    http://localhost:8080/jaxrs-demo/api/hello-world
    你可以查看Tomcat启动日志,找到类似Context initialized for context path [/xxx]的日志,/xxx就是你需要加的上下文路径。
    另外直接访问/api路径返回404属于正常情况,因为你没有配置@Path("/")对应的资源方法。
  • 3. 注解包导入错误

    Tomcat 9支持的是Java EE规范,所有JAX-RS相关注解必须导入javax.ws.rs包下的类,如果你错误导入了Jakarta EE的jakarta.ws.rs包(适配Tomcat 10+),所有注解都会失效。
  • 4. 未注册资源类

    部分JAX-RS实现需要你手动在Application子类中注册资源类,修改你的HelloApplication代码:
    @ApplicationPath("/api")
    public class HelloApplication extends Application {
        @Override
        public Set<Class<?>> getClasses() {
            Set<Class<?>> resources = new HashSet<>();
            resources.add(HelloResource.class);
            return resources;
        }
    }
    
    也可以配置Jersey的包扫描参数,自动识别同包下的资源类。
  • 5. web.xml配置错误

    确保你的WEB-INF/web.xml的根标签版本至少是3.0以上,支持注解扫描,不要手动配置Servlet覆盖了/api前缀的路径映射。

内容的提问来源于stack exchange,提问作者coder-coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:54:01