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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:15:24