在 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 中创建 ResponseEntity 类的对象的方法