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

Java EE容器无法创建Bean,REST接口返回404求助

排查与解决建议
  1. 补全控制器的CDI作用域注解
    Java EE中JAX-RS控制器需要被CDI容器管理才能被实例化,给RestSneakersController添加@RequestScoped(或@Singleton等合适的作用域注解):

    @RequestScoped
    @Path("/sneakers")
    public class RestSneakersController implements SneakersController {
        // ... 原有代码
    }
    
  2. 确保JAX-RS组件被正确注册
    继承Application的空配置类默认扫描自身所在包及子包下的JAX-RS组件,如果控制器在不同包下,手动注册控制器类:

    @ApplicationPath("/api")
    public class RestConfig extends Application {
        @Override
        public Set<Class<?>> getClasses() {
            Set<Class<?>> classes = new HashSet<>();
            classes.add(RestSneakersController.class);
            return classes;
        }
    }
    
  3. 修复容器与Java EE版本兼容性问题
    GlassFish 6.x适配Jakarta EE 9/9.1(API包名为jakarta.*),而当前使用的是Java EE 8(javax.*),包名冲突会导致容器无法识别JAX-RS组件,二选一解决:

    • 降级GlassFish到5.x版本(对应Java EE 8);
    • 将项目依赖迁移到Jakarta EE 9+,替换所有javax.开头的导入为jakarta.。
  4. Tomcat容器补充CDI支持
    Tomcat默认不支持CDI,需引入Weld等CDI实现:

    • 添加Weld相关依赖到项目;
    • 在WEB-INF/web.xml中配置Weld的Servlet监听器。
  5. 验证打包与部署结构
    确认war包中包含编译后的RestConfig与RestSneakersController类,检查Maven/Gradle打包配置是否遗漏相关代码。


内容的提问来源于stack exchange,提问作者Daniele D'Alia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:35:49