如何解决EntityNotFoundException情况下的HTTP状态
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);
}
}
我看过一些示例,他们在其中进行here和here,但是在我看来,这似乎是对HttpStatus
的滥用。资源是API端点(可以),而不是未找到的实体。处理此用例的最佳方法是什么?
@ResponseStatus(value = HttpStatus.NO_CONTENT)
public class MyEntityNotFoundException extends RuntimeException {
public MyEntityNotFoundException(String message) {
super(message);
}
}
我现在扔了它,而不是EntityNotFoundException
解决方法
404
和204
之间永恒的争论。
让我们在这里举一个例子。您的实体现在是一个充满神奇物体的box
。
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:您可能对该主题有不同的看法,这只是我的解释。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。