hibernate 错误处理类未正确触发,在创建REST API时Sping Boot 应用程序上的h2数据库出现问题

2skhul33  于 2023-10-23  发布在  其他
关注(0)|答案(1)|浏览(96)

我一直在做一个简单的项目来创建一个REST API。这个项目有两个问题。例如:

  1. data.sql:我写的SQL查询在其他项目上运行得很好。但在这个项目中,它创建表,但没有在表中插入数据。当我去H2控制台和运行查询它的工作正常。就像我说的,如果我创建新项目并运行创建和插入的查询表,它会工作得很好。
  2. DogNotFoundException.java:这个类用于处理错误。如果请求的id不存在,请适当处理错误。但是当我运行应用程序并输入错误的id时,消息不会出现。如果默认情况下没有手动处理错误,它会显示Whitelabel错误页面,这就是如果我输入错误的id会发生的情况。
    Link of the Project
hfwmuf9z

hfwmuf9z1#

第一个是此issue的副本

总而言之,

  • 必须将create(在schema.sql上)和insert(data.sql)脚本分开
  • 在application.properties上添加下面的属性,这将确保schema.sql被拾取,并且创建脚本被执行spring.jpa.hibernate.ddl-auto=none

在第二个问题上,
@ResponseStatus不是@ ExceptionStatus的替代。基本上,如果您有一个直接传递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"));

希望这有帮助

相关问题