【问题标题】:Ways to create object of ResponseEntity class in spring boot在 Spring Boot 中创建 ResponseEntity 类的对象的方法
【发布时间】:2021-07-05 15:36:50
【问题描述】:

我是 Spring Boot 的新手,我正在尝试创建处理程序方法以在 Spring Boot 中创建 REST API。为了处理请求 localhost:8080/stack 我创建了下面的处理程序方法,在该方法中我使用了 ResponseEntity 的构造函数来创建它的对象并在 return 语句中传递它。

 @GetMapping("/stack")
    public ResponseEntity<String> stack(){
        System.out.println("I am stack method");
        return new ResponseEntity<>("Body",HttpStatus.OK);
    }
}

但我也可以使用下面的方法来做到这一点

 @GetMapping("/stack")
    public ResponseEntity<String> stack(){
        System.out.println("I am stack method");
        return ResponseEntity.status(HttpStatus.OK).body("Body");
    }

我不知道使用构造函数或使用 build method() 在处理程序方法中创建和返回 ResponseEntity 对象的最佳方法是什么?为什么?有人请在这里帮忙。生产中哪种方式最受青睐?

【问题讨论】:

  • 这是一个品味问题:)
  • 这只是一个问题,事实上你甚至可以使用ResponseEntitiy.ok("Body");ResponseBody.ok().body("Body");,这样会更清晰更简洁。
  • 请注意,如果您确实使用status(这对于像 429 这样不太常见的情况是必需的),静态导入枚举值是个好主意,因为代码更具可读性。
  • 在这种情况下,我将只返回一个类似于 public String stack() 的字符串。当我需要在该方法中添加东西时,我只会定义 ResponseEntity 返回对象。不过,所有 3 种方法都会给您相同的结果。

标签: java spring spring-boot api rest


【解决方案1】:

ResponseEntity 旨在表示整个 HTTP 响应。您可以控制其中的任何内容:状态代码、标题和正文。

@ResponseBody 是 HTTP 响应正文的标记,@ResponseStatus 声明了 HTTP 响应的状态码。

@ResponseStatus 不是很灵活,ResponseEntity 可以让你做更多事情。

【讨论】:

    【解决方案2】:

    这与第二种方法返回 ResponseEntity 类的新对象相同。如果您检查 body 方法的实现如下:-

    @Override
        public <T> ResponseEntity<T> body(@Nullable T body) {
            return new ResponseEntity<>(body, this.headers, this.statusCode);
        }
    

    【讨论】:

      【解决方案3】:

      在这种情况下,最好的方法是从 restcontroller 方法返回字符串(“Body”),它将自动包装在响应状态为 200 OK 的响应实体中

      【讨论】:

      • 这实际上取决于控制器的类型。
      • 如果您使用 @ResponseBody 注释您的方法,则不会
      • 正确,但这不是您答案的一部分。您的答案假定为@RestController
      • restcontoller 或 responsebody 都可以,我不知道这里有什么问题
      • 你最初的回答提到了控制器 not restcontoller (你修改了,我可以看到)。
      猜你喜欢
      • 1970-01-01
      • 2021-07-16
      • 2019-03-19
      • 2016-11-02
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 2017-03-20
      • 2022-09-27
      相关资源
      最近更新 更多