Spring座控制器内的try/catch块[已关闭]

hc2pp10m  于 2023-01-08  发布在  Spring
关注(0)|答案(1)|浏览(149)
    • 已关闭**。此问题为opinion-based。当前不接受答案。
    • 想要改进此问题吗?**请更新此问题,以便editing this post可以用事实和引文来回答。

2天前关闭。
Improve this question
在Spring的控制器中使用try/catch是不是一个不好的做法?或者我应该捕获服务中的任何错误并将其返回给控制器?我的例子是:PlayerController

@DeleteMapping("/api/players/{id}")
  ResponseEntity<String> deletePlayer(@PathVariable String id) {
     try {
       playerInterface.deletePlayer(Long.valueOf(id));
       return ResponseEntity.ok().body(String.format("Player with id: %s has been deleted", id));
     } catch (Exception e) {
            return ResponseEntity.internalServerError().body("Could not delete a player");
        }
  }

PlayerService

@Override
public void deletePlayer(Long id) {
  playerRepository.deleteById(id);
}

我只是想知道以这种方式处理控制器中的异常是否没有什么不好的,或者它应该像我使用ExceptionHandler处理GET操作那样在任何地方都可以完成?
一个一个二个一个一个一个三个一个一个一个一个一个四个一个
我只是想知道我应该遵循的标准是什么。我对Spring还是个新手。

zfycwa2u

zfycwa2u1#

你提到的最新的现代方法是使用可选对象和orElseThrow捕捉错误。这可以防止出现空点异常,并考虑最佳实践。

@Override
public Player foundPlayerById(Long id) {
    Optional<Player> foundPlayer = playerRepository.findById(id);
    //prevent null point exception
    return foundPlayer.orElseThrow(PlayerNotFoundException::new);}

相关问题