REST API 在Spring Boot应用程序上出现了对h2数据库的问题
问题描述
我一直在致力于创建一个简单的REST API项目。该项目有两个问题,如下:
data.sql
:我编写的SQL查询在其他项目上运行正常。但是在这个项目上,它能够创建表,但是无法将数据插入到表中。当我进入H2控制台并运行该查询时,它可以正常工作。如我所说,如果我创建一个新项目并运行该查询,表会被创建并且数据会被成功插入,没有任何问题。-
DogNotFoundException.java
:这个类用于处理错误。如果请求的id
不存在,则适当处理错误。但是当我运行应用程序并输入错误的id
时,错误消息没有显示出来。如果没有手动处理错误,默认情况下会显示Whitelabel错误页面,这就是当我输入错误的id
时发生的情况。
解决方案
第一个问题 简要总结如下:
- 你需要将创建(在schema.sql中)和插入(在data.sql中)脚本分开。
- 在application.properties中添加以下属性,确保schema.sql被识别并执行创建脚本:
spring.jpa.hibernate.ddl-auto=none
对于 第二个问题 :
@ResponseStatus不能替代@ExceptionHandler。基本上,如果你只是简单地传递HTTP状态码(在这种情况下是404),则使用前者。如果您需要发送动态消息,则可以使用以下实现:
@ExceptionHandler(value= DogNotFoundException.class)
public ResponseEntity<String> returnNotFoundException(DogNotFoundException ex){
return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
}
在服务类上返回您希望的DogNotFoundException消息。
optionalBreed.orElseThrow(() -> new DogNotFoundException("Breed not found"));