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

问题描述 投票:0回答:1

我一直在致力于一个简单的项目来创建 REST API。该项目有两个问题。如:

  1. data.sql
    :我编写的sql查询在其他项目上完美运行。但在这个项目中,它创建了表,但没有在表上插入数据。当我进入 H2 控制台并运行查询时,它工作正常。正如我所说,如果我创建新项目并运行创建和插入的查询表,没有任何问题,它就可以正常工作。

  2. DogNotFoundException.java
    :该类用于处理错误。如果请求的
    id
    不存在,请适当处理错误。但是当我运行应用程序并输入错误的
    id
    时,消息不会出现。如果默认情况下没有手动处理任何错误,则会给出 Whitelabel 错误页面,如果我输入错误
    id
    ,就会发生这种情况。

项目链接

java spring-boot hibernate rest h2
1个回答
0
投票

第一个是此[问题][1]的重复项 [1]:https://stackoverflow.com/questions/74088975/insert-data-from-sql-file-h2-database-spring-boot

总结一下,

  • 您必须将创建(在 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"));

希望这有帮助

© www.soinside.com 2019 - 2024. All rights reserved.