# 6.1.4 从服务器删除数据

有时数据根本就不再需要了。在这些情况下，客户端需要发起 HTTP DELETE 请求删除资源。

Spring MVC 的 @DeleteMapping 可以方便地声明处理 DELETE 请求的方法。例如，假设需要 API 允许删除订单资源，下面的控制器方法应该可以做到这一点：

```java
@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 中。
