S
S
Spring 实战(第五版)
搜索文档…
S
S
Spring 实战(第五版)
Spring 实战(第 5 版)
第一部分 Spring 基础
第 1 章 Spring 入门
第 2 章 开发 Web 应用程序
第 3 章 处理数据
第 4 章 Spring 安全
第 5 章 使用配置属性
第二部分 集成 Spring
第 6 章 创建 REST 服务
6.1 编写 RESTful 控制器
6.1.1 从服务器获取数据
6.1.2 向服务器发送数据
6.1.3 更新服务器上的资源
6.1.4 从服务器删除数据
6.2 启用超媒体
6.3 启用以数据为中心的服务
6.4 小结
第 7 章 调用 REST 服务
第 8 章 发送异步消息
第 9 章 集成 Spring
第三部分 响应式 Spring
第 10 章 Reactor 介绍
第 11 章 开发响应式 API
第 12 章 响应式持久化数据
第四部分 云原生 Spring
第 13 章 服务发现
第 14 章 配置管理
第 15 章 处理失败和时延
第五部分 部署Spring
第 16 章 使用 SpringBoot Actuator
第 17 章 管理 Spring
第 18 章 使用 JMX 监控 Spring
第 19 章 部署 Spring
由
GitBook
提供支持
6.1.4 从服务器删除数据
有时数据根本就不再需要了。在这些情况下,客户端需要发起 HTTP DELETE 请求删除资源。
Spring MVC 的 @DeleteMapping 可以方便地声明处理 DELETE 请求的方法。例如,假设需要 API 允许删除订单资源,下面的控制器方法应该可以做到这一点:
@DeleteMapping
(
"/{orderId}"
)
@ResponseStatus
(
code
=
HttpStatus
.
NO_CONTENT
)
public
void
deleteOrder
(
@PathVariable
(
"orderId"
)
Long
orderId
)
{
try
{
repo
.
deleteById
(
orderId
);
}
catch
(
EmptyResultDataAccessException
e
)
{}
}
至此,另一个映射注解的思想对你来说应该已经过时了。你已经看到了 @GetMapping、@PostMapping、@PutMapping 和 @PatchMapping —— 每一个都指定了一个方法应该处理对应的 HTTP 方法的请求。@DeleteMapping 用于 deleteOrder() 方法负责处理
/orders/{orderId}
的删除请求。
该方法中的代码实际用于执行删除订单操作。在本例中,它接受作为 URL 中的路径变量提供的订单 ID,并将其传递给存储库的 deleteById() 方法。如果调用该方法时订单存在,则将删除它。如果订单不存在,将抛出一个 EmptyResultDataAccessException 异常。
我选择捕获 EmptyResultDataAccessException 而不做任何事情。我的想法是,如果试图删除一个不存在的资源,其结果与在删除之前它确实存在的结果是一样的,也就是说,资源将不存在。它以前是否存在无关紧要。或者,我也可以编写 deleteOrder() 来返回一个 ResponseEntity,将 body 设置为 null,将 HTTP 状态代码设置为 NOT FOUND。
在 deleteOrder() 方法中需要注意的惟一一点是,它使用 @ResponseStatus 进行了注解,以确保响应的 HTTP 状态是 204(NO CONTENT)。对于不再存在的资源,不需要将任何资源数据发送回客户机,因此对删除请求的响应通常没有正文,因此应该发送一个 HTTP 状态代码,让客户机知道不需要任何内容。
Taco Cloud API 已经开始成形了,客户端代码现在可以轻松地使用这个 API 来显示配料、接受订单和显示最近创建的 tacos。但是还可以做一些事情来让客户端更容易地使用这个 API。接下来,让我们看看如何将超媒体添加到 Taco Cloud API 中。
以前
6.1.3 更新服务器上的资源
下一个
6.2 启用超媒体
最近更新
2yr ago
复制链接