在 Spring Boot 中创建 ResponseEntity 类的对象的方法

Posted

技术标签:

【中文标题】在 Spring Boot 中创建 ResponseEntity 类的对象的方法【英文标题】:Ways to create object of ResponseEntity class in spring boot 【发布时间】: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 种方法都会给您相同的结果。 【参考方案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 (你修改了,我可以看到)。

以上是关于在 Spring Boot 中创建 ResponseEntity 类的对象的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何从 JSON 数组在 DB 中创建表以在 Spring Boot 中创建 REST API

如何在 Spring Boot 中创建自定义错误页面

在 Spring Boot 中创建 ResponseEntity 类的对象的方法

在 Spring Boot 中创建自定义查询时出错

我如何在 Spring Boot/MVC 中创建错误处理程序(404、500...)

如何在spring boot webflux中创建动态过滤器?