gpt4 book ai didi

java - EntityNotFoundException 情况下的 HTTP 状态

转载 作者:行者123 更新时间:2023-12-03 08:34:42 26 4
gpt4 key购买 nike

我正在我的应用程序中处理异常。在我的服务中,我有这个方法:

public Optional<Entity> getEntityById(Long id) {
return Optional.of(EntityMapper.fromEntityToDto(repository
.findById(id)
.orElseThrow(() -> new EntityNotFoundException("No entry was found for" + " id: " + id))));
}

在我的异常处理程序中,我有以下内容

@ControllerAdvice
public class ControllerAdvisor extends ResponseEntityExceptionHandler {

@ExceptionHandler(EntityNotFoundException.class)
public ResponseEntity<Object> handleEntityNotFoundException(EntityNotFoundException ex, WebRequest request) {

ErrorResponse errorResponse = new ErrorResponse(HttpStatus.NOT_FOUND, "Entity not found", ex.getMessage());
return new ResponseEntity<>(errorResponse, HttpStatus.NOT_FOUND);
}
}

我见过他们这样做的例子 herehere但在我看来,这像是对 HttpStatus 的滥用。该资源是 API 端点(这很好),而不是未找到的实体。处理这个用例的最佳方法是什么?


根据 IQbrod 的回答,我创建了一个异常(exception):

@ResponseStatus(value = HttpStatus.NO_CONTENT)
public class MyEntityNotFoundException extends RuntimeException {

public MyEntityNotFoundException(String message) {
super(message);
}
}

我现在抛出它而不是EntityNotFoundException

最佳答案

404204 之间永恒的争论。
让我们尝试举个例子。您的实体现在是一个充满魔法物体的盒子
Box1:这是一个盒子,里面有一匹美丽的小马。
Box2:这是一个空盒子。

让我们询问第一个盒子的内容:

GET https://{URL}/v1/boxes/1/content
  • 200(小马)

现在让我们询问第二个框的内容:

GET https://{URL}/v1/boxes/2/content
  • 204 无内容

让我们询问第 3 个盒子(盒子本身,而不是内容):

GET https://{URL}/v1/boxes/3
  • 204 无内容,在您的存储空间中找不到任何编号为 3 的框

现在让我们问一下第 3 号盒子里面有什么:

GET https://{URL}/v1/boxes/3/content
  • 404 该框不存在。
    这里的 404 确实意味着找不到资源,用户没有检查该框是否存在,并且他的请求是无意义的(基本上是 4xx)。

PS:您可能对这个主题有不同的看法,这只是我的解释。

关于java - EntityNotFoundException 情况下的 HTTP 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64278701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com