【发布时间】:2019-04-07 11:29:33
【问题描述】:
我正在 Spring Boot 中开发一个 Rest API。找不到资源实例时,以下哪项是最好的处理方式?
@GetMapping(value="/book/{id}")
public ResponseEntity<Book> getBook(@PathVariable String id){
Book book = bookService.getBook();
// Which is best Approach for resource instance not found ?
if(book == null) {
// This one
return new ResponseEntity<>(book, HttpStatus.NO_CONTENT);
//OR
return new ResponseEntity<>(book, HttpStatus.NOT_FOUND);
//OR
throw new DataNotFoundException("Book with id " + id + " Does not exist");
}
return new ResponseEntity<>(book , HttpStatus.OK);
}
我很清楚,当在 Db 中找不到资源集合时,然后传递一个空集合而不是 null,但我不清楚如何处理资源实例。
我还在 StackOverflow 上读到 HttpStatus.NOT_FOUND 应该在条件下的资源不能存在而不是在 Db 中不存在时使用。
处理这个问题的最佳方法是什么?
【问题讨论】:
-
虽然要求“最佳方法”主要是固执己见,但如果找不到资源,好的 REST API 应该始终使用 HTTP 404 来回答;即给定的 ID 不存在。
-
@Seelenvirtuose,我应该作为异常返回还是作为响应实体发送?我可以在两种情况下都设置响应状态 404
-
如果找不到资源,则 404 不是适当的响应,相反,无内容响应会更干净@Seelenvirtuose
标签: java spring spring-boot