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

Jakarta 9中JAX-RS资源访问返回404错误求助

REST服务404问题排查与解决

静态页面能正常访问,说明WAR包部署成功、上下文根TimeTracking配置无问题,问题集中在REST服务的注解配置、包扫描或依赖上,按以下步骤排查:

1. 核对REST注解的命名空间

确保所有REST注解使用Jakarta命名空间,而非旧JEE的javax.*,Wildfly 25适配Jakarta EE 9.1,旧注解会被忽略:

  • 正确导入:import jakarta.ws.rs.GET;、import jakarta.ws.rs.Path;、import jakarta.ws.rs.Produces;
  • 错误示例:import javax.ws.rs.*;(这类注解无法被Jakarta环境识别)

2. 检查ApplicationConfig的配置

ApplicationConfig作为REST应用的入口类,需正确配置路径和扫描范围:

  • 必须添加@ApplicationPath注解,指定REST服务的根路径,比如要匹配/test路径,需写:
    @ApplicationPath("test")
    public class ApplicationConfig extends Application {
    }
    
  • 确保ApplicationConfig的包范围能覆盖HelloResource:
    • 如果ApplicationConfig在com.example.config,HelloResource在com.example.resource(子包),Wildfly会自动扫描到;
    • 如果不在同一包/子包,需手动注册资源类:
      @Override
      public Set<Class<?>> getClasses() {
          Set<Class<?>> classes = new HashSet<>();
          classes.add(HelloResource.class);
          return classes;
      }
      

3. 验证HelloResource的路径映射

确认类和方法上的@Path注解组合后与访问URL匹配:

  • 若ApplicationConfig的@ApplicationPath("test"),HelloResource类上标注@Path("hello"),则完整路径为/TimeTracking/test/hello,与你的访问地址一致;
  • 避免路径前多写斜杠,比如@Path("/hello")不影响,但保持统一风格即可。

4. 检查pom.xml依赖配置

确保依赖的是Jakarta EE API,且设置为provided(Wildfly自带这些API,无需打包进WAR):

<dependency>
    <groupId>jakarta.ws.rs</groupId>
    <artifactId>jakarta.ws.rs-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

同时检查maven-war-plugin配置,确保编译后的类文件(ApplicationConfig.class、HelloResource.class)打包到WAR的WEB-INF/classes目录下。

5. 查看Wildfly部署日志

进入Docker容器查看Wildfly日志,确认REST应用是否被正确加载:

  • 执行命令进入容器:docker exec -it <容器名称/ID> /bin/bash
  • 查看日志文件:cat standalone/log/server.log
  • 搜索关键字:Registered RESTful application、HelloResource,如果没有相关加载记录,说明包扫描或注解配置存在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:10:43