Spring Boot REST API问题:H2数据库数据插入失败与自定义异常未触发
简易REST API项目问题排查与解决
问题1:data.sql仅创建表但未插入数据
排查方向:
- 检查Spring Boot配置项
spring.sql.init.mode,需设置为always或embedded(嵌入式数据库场景),若为never会跳过数据插入步骤 - 确认
data.sql存放路径为src/main/resources,Spring Boot默认仅加载该目录下的初始化脚本 - 查看项目日志中
Spring SqlScript相关输出,确认脚本是否被执行、是否存在执行报错 - 核对脚本SQL语法,确保语句结尾有分号,且与当前H2数据库版本兼容(虽然手动执行正常,但自动执行时的上下文可能存在差异)
问题2:DogNotFoundException未触发,返回默认Whitelabel错误页
排查方向:
- 确认
DogNotFoundException类是否添加了@ResponseStatus(HttpStatus.NOT_FOUND)注解,让Spring识别该异常对应的HTTP状态码 - 检查业务逻辑(如Service层的
findById方法),确保当查询不到对应ID的数据时,主动抛出该异常,示例:public Dog findById(Long id) { return dogRepository.findById(id) .orElseThrow(() -> new DogNotFoundException("Dog not found with id: " + id)); } - 若使用全局异常处理器(
@ControllerAdvice),需确保该异常被正确捕获并返回自定义响应,示例:@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(DogNotFoundException.class) @ResponseBody public ResponseEntity<String> handleDogNotFound(DogNotFoundException ex) { return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND); } } - 排查是否存在优先级更高的异常处理器,覆盖了
DogNotFoundException的处理逻辑
内容的提问来源于stack exchange,提问作者Sakib X Hossain
相关产品推荐
相关产品推荐

