Spring Boot RestController 中返回 void 和 ResponseEntity<Void> 有啥区别?

Posted

技术标签:

【中文标题】Spring Boot RestController 中返回 void 和 ResponseEntity<Void> 有啥区别?【英文标题】:What is the difference between returning void and ResponseEntity<Void> in Spring Boot RestController?Spring Boot RestController 中返回 void 和 ResponseEntity<Void> 有什么区别? 【发布时间】:2022-01-23 01:05:47 【问题描述】:

不知道 Spring Boot RestController 的返回值如果返回 void 有什么区别?

无论哪种方式,我都可以看到测试中的差异。似乎即使我返回 void HttpStatus.NO_CONTENT (204) 也会返回给请求者,就像我使用 ResponseEntity&lt;Void&gt; 一样。

所以,当我从端点返回 void 时,无论如何都会返回 HttpStatus,我选择 void 还是 ResponseEntity&lt;Void&gt; 都没关系?

【问题讨论】:

【参考方案1】:

没错。如果你想添加一些标题,你需要ResponseEntity&lt;Void&gt;

【讨论】:

在我的测试中我做 mockMvc... .andExpect(status().isNoContent());无论哪种方式,它都是成功的。因此,当返回类型为原始 void 时,HttpStatus 似乎也被发送给请求者。那么我为什么要使用 ResponseEntity?有什么好处?所以,如果我不想添加任何其他标题,那么使用哪种返回类型并不重要? HttpStatus 会一直返回吗? 这就是我在回答中写的:“如果你想添加一些标题,你需要 ResponseEntity。” @du-it 在您的情况下,您可以安全地从控制器的方法返回 void

以上是关于Spring Boot RestController 中返回 void 和 ResponseEntity<Void> 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Spring-Boot:同时处理多个请求

spring Restcontroller 或 RepositoryRestResource 用啥

Spring:RestController 和 Controller 的不同异常处理程序

Spring Boot 学习例子

Spring Boot 2Spring Boot CLI

为啥 Spring Boot 应用程序 pom 同时需要 spring-boot-starter-parent 和 spring-boot-starter-web?