Spring JDBC访问H2数据库GET请求出现404(null)错误求助
排查Spring JDBC + H2 404请求失败问题
嘿,我来帮你搞定这个404的问题,这在Spring Web开发里真的是高频踩坑点,咱们一步步排查:
1. 先检查控制器的映射配置
这是最常见的原因,先确认你的控制器类和方法注解有没有写对:
- 控制器类必须加上
@RestController(或者@Controller+@ResponseBody),不然Spring不会把它识别为Web控制器:@RestController public class RideController { // 你的方法在这里 } - 方法上的
@GetMapping路径要严格匹配/rides,注意大小写敏感,别写成/Rides或者/ride了:@GetMapping("/rides") public List<Ride> fetchAllRides() { // 这里调用JdbcTemplate查询H2数据库的逻辑 return jdbcTemplate.query("SELECT * FROM rides", new BeanPropertyRowMapper<>(Ride.class)); }
2. 确认组件扫描覆盖了控制器
如果你的控制器类不在Spring Boot主应用类的同级或子包下,Spring会找不到它!比如主应用类在com.example.app,而控制器在com.example.controllers,那得在主类上指定扫描路径:
@SpringBootApplication(scanBasePackages = {"com.example.app", "com.example.controllers"}) public class RideApplication { public static void main(String[] args) { SpringApplication.run(RideApplication.class, args); } }
3. 检查Spring JDBC的配置是否正常
虽然是404,但如果JDBC模板初始化失败,也可能导致控制器无法正常注册:
- 先看
application.properties里的H2配置是否正确:spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa spring.datasource.password= spring.h2.console.enabled=true # 开启控制台方便验证数据 - 确认
JdbcTemplate已经被正确注入到控制器中,推荐用构造注入比@Autowired更稳妥:private final JdbcTemplate jdbcTemplate; public RideController(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; }
4. 查看应用启动日志有没有异常
除了RestTemplate的404日志,重点看应用启动阶段的日志:
- 有没有出现
Failed to instantiate controller这类报错? - 有没有数据库连接失败的提示?比如H2数据库URL写错了?
这些问题都会导致控制器没被Spring正确注册,自然访问不到。
5. 验证请求路径和端口是否完全匹配
最后再确认几个细节:
- 应用是不是真的跑在8080端口?检查
application.properties里的server.port配置,如果改成了其他端口(比如8081),请求URL要对应调整。 - 有没有设置上下文路径?比如
server.servlet.context-path=/api,那请求URL应该是http://localhost:8080/api/rides,而不是直接/rides。
小提示
可以先通过H2控制台(默认路径http://localhost:8080/h2-console)连接数据库,手动执行SELECT * FROM rides,确认表存在且有数据,先排除数据层的问题,再专注解决Web层的映射问题。
内容的提问来源于stack exchange,提问作者SVill
相关产品推荐
相关产品推荐

