我在 Spring Bot Controller 中使用 HttpStatus.OK
来处理我的所有请求。但我意识到返回正确的 Http 状态是件好事,并开始使用以下内容:
GET --> Ok
POST -> Created
PUT --> Ok ???
DELETE --> NoContent ???
但我不确定 PUT 和 DELETE,有些人建议使用 NoContent 进行 DELETE,使用 Ok 进行 PUT。但我很困惑,不知道哪个合适。
那么,我应该对 PUT 和 DELETE 使用哪些状态代码?这是我的 DELETE 的示例用法,但我不确定当状态代码为 NoContent 时我们是否可以返回正文(有意义吗?)
@DeleteMapping("/categories/{id}")
public ResponseEntity<ApiResponse<CommandResponse>> deleteById(@PathVariable long id) {
final CommandResponse response = categoryService.deleteById(id);
return ResponseEntity
.status(HttpStatus.NO_CONTENT)
.body(new ApiResponse<>(Instant.now(clock).toEpochMilli(), SUCCESS, response));
}
更新:根据情况,我认为以下实现是可以的:
#1:
@DeleteMapping("/categories/{id}")
public ResponseEntity<ApiResponse<Void>> deleteById(@PathVariable long id) {
categoryService.deleteById(id);
return ResponseEntity.ok(new ApiResponse<>(Instant.now(clock).toEpochMilli(), SUCCESS));
}
#2:
@DeleteMapping("/categories/{id}")
public ResponseEntity<ApiResponse<Void>> deleteById(@PathVariable long id) {
categoryService.deleteById(id);
return ResponseEntity
.status(HttpStatus.NO_CONTENT)
.build();
}
最佳答案
204(无内容)响应不应包含正文; “无内容”意味着没有内容。 204 对于 DELETE 响应来说是相当标准的(当然当它成功时),但我也看到 200 OK。
对于成功的 PUT 请求,通常会返回 200 响应状态,并将更新的资源(实体等)作为正文。这使得客户端无需再向服务器进行往返 GET 来获取更新的资源。
顺便说一句,Spring 提供了一个注释来指定响应状态代码,因此您不必在代码中写得如此冗长。例如:
@DeleteMapping("/categories/{id}")
@ResponseStatus(value = HttpStatus.NO_CONTENT)
public void deleteById(@PathVariable long id) {
categoryService.deleteById(id);
}
关于java - Spring Boot REST API 的 @PutMapping 和 @DeleteMapping 的 HTTP 状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75593543/