Java EE容器无法创建Bean,REST接口返回404求助
排查与解决建议
补全控制器的CDI作用域注解
Java EE中JAX-RS控制器需要被CDI容器管理才能被实例化,给RestSneakersController添加@RequestScoped(或@Singleton等合适的作用域注解):@RequestScoped @Path("/sneakers") public class RestSneakersController implements SneakersController { // ... 原有代码 }确保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; } }修复容器与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.。
Tomcat容器补充CDI支持
Tomcat默认不支持CDI,需引入Weld等CDI实现:- 添加Weld相关依赖到项目;
- 在
WEB-INF/web.xml中配置Weld的Servlet监听器。
验证打包与部署结构
确认war包中包含编译后的RestConfig与RestSneakersController类,检查Maven/Gradle打包配置是否遗漏相关代码。
内容的提问来源于stack exchange,提问作者Daniele D'Alia
相关产品推荐
相关产品推荐

