实现 POST 方法以创建用户资源

2025年1月18日 | 阅读5分钟

在之前的几个步骤中,我们已经创建了简单的RESTful服务。在本节中,我们将使用POST方法来发布特定URI“/users”的用户资源。

这里我们使用了两个注解:@RequestBody@PathMapping

@RequestBody

@RequestBody注解将Web请求的主体映射到方法参数。请求的主体通过HttpMessage转换器传递。它根据请求的内容类型解析方法参数。可选地,可以通过用@Valid注解参数来应用自动验证。

在下面的示例中,当我们在 createUser() 方法中传递 @RequestBody 注解时,它会映射到 user 参数。

@PathMapping

@PathMapping 注解是 @RequestMapping 注解的特化版本,它充当 @RequestMapping(method=RequestMethod=POST) 的快捷方式。@PostMapping 方法处理与指定 URI 匹配的 HTTP POST 请求。

让我们创建一个用户资源并通过POST方法发布该资源。

步骤1:打开UserResource.java并添加@PostMapping("/user")

步骤2:创建一个 createUser() 方法,并将User类的 对象 作为Web请求的 主体 传递。

步骤3:保存创建的用户。

UserResource.java

当我们刷新页面时,它会返回一个GET请求。但我们需要发送POST请求。我们可以通过 REST客户端 发送POST请求。REST客户端是一种专门用于与服务器(RESTful)交互的服务。

让我们看看如何使用REST客户端。

步骤4:从https://www.getpostman.com/downloads/下载Postman。

或者在浏览器中添加Google Chrome扩展程序https://bit.ly/1HCOCwF。

步骤5:启动 Postman注册。创建一个 用户名。我们在这里创建了用户名 javatpoint 并点击了 Submit 按钮。请参见下图

Implementing the POST Method to create User Resource

步骤6:首先,我们检查 GET 请求。在地址栏中输入URL https://:8080/users/1,然后点击 Send 按钮。它会返回第一个用户的详细信息。

Implementing the POST Method to create User Resource

步骤7:现在我们发送一个POST请求。

  • 将方法更改为 POST
  • 复制来自“/users/1”的响应 主体
  • 点击 Body 选项卡。现在我们为POST请求创建一个主体。
  • 选择 raw 选项。它会创建一个原始请求。
  • 粘贴复制的内容。
  • 删除 id,因为它会自动递增。
  • 将“name”更改为“Thomas”。
  • 我们不发送文本,而是以JSON格式发送数据。所以选择 JSON (application/json)
  • 输入URL https://:8080/users,然后点击 Send 按钮。
  • 点击窗口左侧的 Get 请求。
  • 现在我们再次发送一个Get请求,所以将URL更改为 https://:8080/users,然后点击 Send 按钮。它会显示所有用户,包括我们创建的用户。
Implementing the POST Method to create User Resource

增强POST方法以返回正确的HTTP代码和状态位置

在本节中,我们将返回已创建用户资源的 状态(Created)和 URI("/users/6")。

ResponseEntityClass

ResponseEntity 是一个类,它继承了 HttpEntity 和 HttpStatus 类。它定义在 org.springframework.http.RequestEntity 中。

  • 它用于 RestTemplate@Controller 方法。
  • 它用作 getForEntity()exchange() 方法的参数。
  • 它也用于Spring MVC,作为 @Controller 方法的参数。

RequestEntity 的 created() 方法Class

created() 方法是 RequestEntity 类的静态方法。它创建一个带有 CREATED 状态和由给定 URI 设置的位置头的新 构建器

语法

参数:它接受 位置URI 作为参数。

返回:它返回 创建的构建器

所有HTTP状态码都是 Enum 常量,定义在 HttpStatus 类中。

ServletUriComponentsBuilder

ServletUriComponentsBuilder 是一个类,定义在 org.springframework.web.servlet.support.ServletUriComponentsBuilder 中。它继承了 UriComponentsBuilder 类。它提供了额外的静态工厂方法来基于当前的HttpServletRequest创建链接。

fromCurrentRequest() 方法

它与 fromRequest(HttpServletRequest) 方法相似,但请求是通过RequestContextHolder获取的。

path() 方法

path() 是 UriComponentsBuilder 类的 方法。它将给定的路径附加到此构建器的现有路径。给定的路径可能包含URI模板变量。

语法

参数:它接受一个 路径 作为参数。

返回:它返回 UriComponentsBuilder

buildAndExpand() 方法

它构建UriComponents实例,并用数组中的值替换URI模板变量。它是构建build()和UriComponents.expand(Object... uriVariableValues)的快捷方法。

语法

参数:它接受 URI变量值 作为参数。

返回:它返回 带有扩展值的URI组件

build() 方法

它从构建器中包含的各种组件构建UriComponents实例。

语法

参数:它不接受任何参数。

返回:它返回 URI组件

让我们看看如何返回已创建资源的状态以及如何在响应中设置已创建资源的URI

步骤1:创建一个创建用户资源并返回 ResponseEntity 的方法。

UserResource.java

步骤2:现在打开REST客户端 Postman 并创建一个 POST 请求。

步骤3:History 选项卡下点击POST请求。

步骤4:点击Body选项卡,并将用户名更改为 James

步骤5:确保您已选择 JSON (application/json) 媒体类型。

步骤5:点击 Send 按钮。

在窗口的右侧,我们可以看到 Status: 201 Created。这意味着资源已成功创建。

步骤6:现在点击Headers选项卡查看位置。Location是已创建资源的URI。它显示已创建用户James的位置,即“/users/6”。

Implementing the POST Method to create User Resource

如果客户端想知道用户资源是在哪里创建的,只需从响应头中获取位置信息即可。