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

运行在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 10:45:00