Controller类报隐式超类Object构造函数未定义错误如何解决
问题说明
编写Spring项目Controller控制器类时,编译阶段抛出如下错误:
Implicit super constructor Object() is undefined for default constructor. Must define an explicit constructor
对应问题代码如下:
@RestController public class EmployeeController { @Autowired private EmployeeService es; @RequestMapping(value="/{id}", method=RequestMethod.GET) public Employee getEmployeeByID(@PathVariable Long id) { return es.getEmployeeByID(id) .orElseThrow(() -> new ResourceNotFoundException("User not found with id :" + id)); } }
报错根因
这个报错和贴出的Controller业务逻辑本身无关,核心是编译器无法识别Java基础类java.lang.Object的默认无参构造函数,常见触发场景如下:
- IDE关联的项目JDK/JRE配置错误、路径失效,或者选用的运行环境版本不匹配
- 项目构建路径损坏,系统自带的JRE核心类库没有被正确加载到编译路径中
- 项目存在其他编译错误(比如自定义异常类
ResourceNotFoundException语法错误、缺失构造函数),连带触发该假报错 - Maven/Gradle依赖拉取不全,项目构建缓存损坏
修复方案
按优先级依次排查:
- 修正项目JDK配置
- Eclipse/STS环境:右键项目选择
Build Path -> Configure Build Path,在Libraries标签页移除当前报错的JRE System Library,重新添加本地安装的对应版本JDK(不要使用独立的JRE运行环境),保存后执行Project -> Clean清理项目重新编译 - IDEA环境:打开
File -> Project Structure -> Project Settings -> Project,确认SDK选择为本地正确安装的JDK版本,同时检查Modules标签下的SDK配置与项目保持一致,确认后执行Build -> Rebuild Project重新构建
- Eclipse/STS环境:右键项目选择
- 刷新构建依赖
Maven项目右键选择Maven -> Update Project,勾选强制更新快照/发布版本选项,等待依赖更新完成后重新编译;Gradle项目在项目根目录执行./gradlew clean build命令清理缓存重新构建 - 排查关联自定义类
检查代码中引用的ResourceNotFoundException、EmployeeService等自定义类,确认类本身无语法错误、构造函数定义正常,可以独立编译通过 - 校验导入语句
确认Controller类中所有Spring相关注解、自定义类的import导入语句完整无缺失。
内容的提问来源于stack exchange,提问作者shark
相关产品推荐
相关产品推荐

