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

Java 11+Tomcat10.1部署RESTEasy JAX-RS应用遇404问题求助

解决Java 11 + Tomcat 10.1 + RESTEasy JAX-RS 404问题的核心思路

1. 优先确认RESTEasy依赖的Jakarta适配版本

Tomcat 10.1基于Jakarta EE 10,所有API包已从javax.*迁移到jakarta.*,必须使用RESTEasy的Jakarta专属版本,绝对不能用传统Java EE版依赖。

在pom.xml中替换为以下依赖(用最新稳定版):

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jakarta-jaxrs</artifactId>
    <version>6.2.7.Final</version>
</dependency>
<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jakarta-servlet-initializer</artifactId>
    <version>6.2.7.Final</version>
</dependency>

注意:清理所有带javax前缀的RESTEasy依赖(比如resteasy-jaxrs),这类依赖会和Tomcat 10+的Jakarta环境冲突,直接导致资源无法被识别。

2. 修正Web应用初始化配置

传统web.xml配置方式

确保使用Jakarta命名空间,且参数、Servlet类均为Jakarta适配版:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
         version="6.0">
    <servlet>
        <servlet-name>Resteasy</servlet-name>
        <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
        <init-param>
            <param-name>jakarta.ws.rs.Application</param-name>
            <param-value>com.yourpackage.YourApplicationClass</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>Resteasy</servlet-name>
        <url-pattern>/network-management/*</url-pattern>
    </servlet-mapping>
</web-app>

关键细节:init-param的名称是jakarta.ws.rs.Application,而非旧版的javax.ws.rs.Application;Servlet类必须是Jakarta版本的HttpServletDispatcher。

注解驱动(无web.xml)方式

应用类必须继承Jakarta版Application,注解路径匹配要准确:

package com.yourpackage;

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

@ApplicationPath("/network-management")
public class NetworkManagementApplication extends Application {
}

注意:导入的是jakarta.ws.rs包下的类,绝对不能用javax.ws.rs的旧包。

3. 验证资源类的注解与路径匹配

资源类必须使用Jakarta版JAX-RS注解,确保路径层级和请求URL完全对应:

package com.yourpackage.resources;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;

@Path("/configurations")
public class ConfigurationResource {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public String getConfigurations() {
        return "{\"status\":\"ok\"}";
    }
}

URL匹配规则:http://localhost:8080/[项目上下文路径]/[ApplicationPath]/[资源Path]。比如你的项目上下文是NetworkManagement,@ApplicationPath为/network-management,资源@Path为/configurations,最终URL就是http://localhost:8080/NetworkManagement/network-management/configurations,每一层路径都不能错。

4. 排查Tomcat部署与日志

  • 检查Tomcat的webapps目录,确认项目已正确解压,WEB-INF/lib下只有Jakarta版RESTEasy依赖,无javax版冗余包。
  • 查看Tomcat的logs/catalina.out或localhost.log,启动时是否有RESTEasy初始化日志(比如“Deploying RESTEasy application”相关内容),如果没有,说明初始化失败,大概率是依赖或配置错误。
  • 确认项目上下文路径:Eclipse中右键项目→Properties→Web Project Settings,查看“Context root”是否为NetworkManagement,如果不是,URL中的上下文路径要同步修改。

5. 其他常见问题修正

  • Java 11编译配置:在pom.xml中明确指定编译版本,避免版本不兼容:
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
            <configuration>
                <source>11</source>
                <target>11</target>
            </configuration>
        </plugin>
    </plugins>
</build>
  • 检查包导入:确保资源类、应用类中没有误导入javax.ws.rs的注解,这类错误会直接导致Tomcat无法识别资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:25:54