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
相关产品推荐
相关产品推荐

