运行在Jetty 11上的简单Jersey REST服务访问404问题求助
修复方案
1. 修正HelloApplication类定义
JAX-RS规范要求入口类必须继承jakarta.ws.rs.core.Application,你当前的类仅添加了@ApplicationPath注解,无法被Jersey识别,所以不会注册任何REST端点,这是404、断点不触发的核心原因。
修复后代码:
import jakarta.ws.rs.ApplicationPath; import jakarta.ws.rs.core.Application; @ApplicationPath("/api") public class HelloApplication extends Application { public HelloApplication() { // 注意部分容器场景下System.console()可能返回null,建议替换为System.out打印 System.out.println("testing"); } }
2. 修正POM依赖配置
你当前引入的jersey-container-jetty-http是嵌入式Jetty场景专用依赖,打WAR包部署到独立Jetty服务器时,需要替换为Servlet容器适配依赖:
将原有jersey-container-jetty-http依赖替换为以下内容:
<dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet-jakarta</artifactId> <version>3.0.2</version> </dependency>
同时建议将servlet-api的scope设置为provided,避免和Jetty自带的API冲突:
<dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>5.0.0</version> <scope>provided</scope> </dependency>
3. (可选)避免类扫描异常
如果修改后仍无法访问,可以主动在HelloApplication中注册资源类,跳过自动扫描逻辑,稳定性更高:
import jakarta.ws.rs.ApplicationPath; import jakarta.ws.rs.core.Application; import java.util.Set; @ApplicationPath("/api") public class HelloApplication extends Application { @Override public Set<Class<?>> getClasses() { // 这里加入所有你编写的Resource类即可 return Set.of(HelloResource.class); } }
验证操作
所有修改完成后执行mvn clean package重新打WAR包,重启Jetty后再次访问目标地址即可正常返回内容,断点也会正常触发。
内容的提问来源于stack exchange,提问作者schill32
相关产品推荐
相关产品推荐

