当前位置: 首页 > 知识库问答 >
问题:

在Rest API中找不到处理资源

姚乐家
2023-03-14
    @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);
    }

我还在StackOverflow上读到,当条件下的资源在数据库中不存在而不是不存在时,应该使用httpstatus.not_found

处理这个问题的最佳方法是什么?

共有1个答案

邵奇
2023-03-14

使用Spring MVC时,返回结果时通常有两种选择,要么使用普通对象,要么使用ResponseEntity类。这两个都不比另一个好。此外,您还可以决定是否使用异常来分离错误处理。

鉴于此,通过引发异常的第三个场景与前两个选项中的一个基本相同。默认情况下,抛出异常将导致500内部服务器错误,但可以通过使用@responsestatus注释进行更改,例如:

 @ResponseStatus(HttpStatus.NOT_FOUND) // Or @ResponseStatus(HttpStatus.NO_CONTENT)
 public class DataNotFoundException extends RuntimeException {

 }

或者,也可以定义异常处理程序。同样,这可以通过使用普通对象或responseentity来完成,例如:

@ResponseStatus(HttpStatus.NOT_FOUND) // Or @ResponseStatus(HttpStatus.NO_CONTENT)
@ExceptionHandler(DataNotFoundException.class)
public Book handleNotFound(DataNotFoundException ex) {
    return null;
}
@ExceptionHandler(DataNotFoundException.class)
public ResponseEntity<Book> handleNotFound(DataNotFoundException ex) {
    return new ResponseEntity<>(null, HttpStatus.NOT_FOUND); // Or HttpStatus.NO_CONTENT
}

现在,这意味着还有两个选择,要么选择httpstatus.not_find(404),要么选择httpstatus.no_content(204)。虽然在技术上可以使用这两种状态,但它们具有不同的含义:

  • 204=请求成功,但什么也没有。
  • 404=请求不成功,资源不存在

现在,如果您请求/book/123,但没有ID为123的书,那么它可以被视为不存在的资源,因此,httpstatus.not_find最有意义。

 类似资料:
  • 我创建了一个Android库,它使用JavaPoet生成类。它在我当地的工作环境中运行良好;即使我将库模块包含到另一个项目中。 现在我正在尝试通过bintray把我的项目放到网上。项目上传正确,但是当我把它包含在一个新项目中并构建项目时,我得到了这样一条消息: 错误:错误的服务配置文件,或在构造处理器对象javax时引发异常。注释。处理。处理器:我。阿弗拉克。过滤处理器。无法实例化FilterPr

  • 我已经尝试从一个jar文件导入(例如快捷hull3d)在处理2.2.1和3.2.1在Linux和Mac上根据这里给出的说明 我的目录结构如下所示 ../处理/Sketchbook/库/quickhull3d/库/quickhull3d。罐子 处理IDE首选项将素描本位置设置为... /Processing/Sketchbook 在我的。pde文件,我有开场白 我得到了错误: 找不到用于Quickh

  • 问题内容: 我一直在尝试使用NetBeans Ide创建一个简单的Restful WebService。 我的Java EE版本是:Java EE 7 Web。 我创建了一个新的Java Web应用程序,设置此ContexPath: 。 现在,运行我的应用程序,浏览器在以下位置显示我的页面: 因此,一切正常。 然后,我尝试使用RESTful Web服务向导创建一个简单的Restful资源。 因此,

  • 我正在做一个项目,编译并运行我的IDE工作正常。所有资源都找到了,它正常工作。然而,当我构建我的. jar时,它能够找到一些资源,但不是全部。我的项目结构看起来是这样的: 当我运行jar文件时,它能够找到图像并使用它们,但是当我尝试访问html文件时,它不会打开。下面是jar的项目结构; 我以前从未处理过jar文件,所以这似乎是我犯的一个非常明显的错误。感谢您的帮助,谢谢! 编辑:访问找不到的文件

  • 我正在使用ADT 我的styles.xml:

  • 在处理中,我有以下错误: 我正在尝试运行“exemplePPhys2D_geeknessrain.pde”,可以在 https://projets.pingbase.net/libro/projects/hub/repository/revisions/7/entry/EXEMPLES/pphys2d/examples/exemplePPhys2D_geeknessrain/exemplePPhy