7.1.2 向服务器发送数据

到目前为止,API 能够返回一些最近创建的 tacos。但是这些 tacos 是如何产生的呢?

虽然您可以使用 CommandLineRunner bean 为测试而预加载一些数据,但最终 Taco 的数据来自用户,由他们进行 Taco 创作。因此 我们需要在 TacoController 中编写一个方法,来处理包含 taco 设计的请求,并将它们保存到数据库中。通过将以下 postTaco() 方法添加到 TacoController,您可以使控制器完成这项工作:

@PostMapping(consumes="application/json")
@ResponseStatus(HttpStatus.CREATED)
public Taco postTaco(@RequestBody Taco taco) {
  return tacoRepo.save(taco);
}

因为 postTaco() 将处理 HTTP POST 请求,所以它用 @PostMapping 注解,而不是 @GetMapping。这里没有指定 path 属性,因此postTaco() 方法将处理对 /api/tacos 的请求。路径是在 TacoController 类中由注解 @RequestMapping 指定的。

您确实设置了 consumes 属性。consumes 属性是请求输入,products 是请求输出。这里使用 consumes 表示该方法将只处理内容为 application/json 类型的请求。

该方法的 Taco 参数用 @RequestBody 注解,以指示请求应转换为 Taco 对象并绑定到参数上。此注解很重要:如果没有它,Spring MVC 将假定您需要请求参数(查询参数或表单参数)。但是 @RequestBody 注解确保请求主体中的 JSON 绑定到 Taco 对象上。

一旦 postTaco() 接收到 Taco 对象后,就会将其传递给 TacoRepository 的 save() 方法。

这里在 postTaco() 方法上使用了 @ResponseStatus(HttpStatus.CREATED) 注解。在正常情况下(当没有抛出异常时),所有响应的 HTTP 状态码为 200(OK),表示请求成功。尽管 HTTP 200 响应总是好的,但它并不总是具有足够的描述性。对于 POST 请求,HTTP 状态 201(CREATED)更具描述性,它告诉客户机,请求不仅成功了,而且还创建了一个资源。在适当的地方使用 @ResponseStatus 将最具描述性和最准确的 HTTP 状态代码传递给客户端总是一个好想法。

虽然已经使用 @PostMapping 创建了一个新的 Taco 资源,但是 POST 请求也可以用于更新资源。即便如此,POST 请求通常用于创建资源,PUT 和 PATCH 请求用于更新资源。让我们看看如何使用 @PutMapping@PatchMapping 更新数据。

results matching ""

    No results matching ""