Spring Boot 中 REST API 接口传参

我们在开发 REST API 的过程中,经常需要传递参数,那么,我们可以怎么做呢?本文,我们将探讨 Spring Boot 项目中三种传递参数的方式,如下👇

  • @PathVariable
  • @RequestParam
  • @RequestBody

什么是 REST APIREST API 是基于 REST 架构原则设计的一组规范和约定,用于在不同软件系统之间进行通信。

测试环境

  • macOs Monterey 12.4 (Apple M1)
  • IntelliJ IDEA 2021.2.2(Ultimate Edition)
  • java --version (17.0.7)
  • maven version 3.9.2
  • Spring Boot version 3.2.0
  • Postman version 8.12.1

相关依赖

这里我们不考虑数据库、security 等的引入,相关的依赖比较简单,如下:

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

spring-boot-starter-web 是用于开发基于 Spring BootWeb 应用程序的起步依赖,支持 RESTful API 的开发。
PS:当然,我们后期可以引入数据库、JWT 等操作,但是,这个知识点并不是本文的重点

@PathVariable 注解

@PathVariable 注解 用于从 URI 中提取模版变量,并将其绑定到方法的参数上。如下:

java 复制代码
@RestController
@RequestMapping("/api")
public class HelloController {
  @GetMapping("/hello/{name}")
  public String sayHello(@PathVariable String name) {
    return "Hello, " + name + "!";
  }
}

启动程序,在 postman 中输入 http://localhost:8080/api/hello/Jimmy,即可看到输出 Hello, Jimmy! 的返回信息。如下图👇

上面的 @GetMapping("/hello/{name}")@PathVariable String name 其实是省略了同名的写法,如果 GetMapping 中路径变量和方法的参数变量不同名,我们需要做下调整。

java 复制代码
@RestController
@RequestMapping("/api")
public class HelloController {
  @GetMapping("/hello/{username}")
  public String sayHello(@PathVariable("username") String name) {
    return "Hello, " + name + "!";
  }
}

上面的运行效果跟截图展示的效果一样。

@RequestParam 注解

@RequestParam 注解HTTP 请求中的参数值映射到方法的参数上。如下示范:

java 复制代码
@RestController
@RequestMapping("/api")
public class ParamController {
  @RequestMapping("/param")
  public String requestParamDemo(@RequestParam String name) {
    return "Hello, " + name + "!";
  }
}

我们在 postman 上请求 http://localhost:8080/api/param?name=Jimmy,可看到输出 Hello, Jimmy! 的字样。

上面的代码中传参还可以是下面的这种推荐写法:

java 复制代码
@RestController
@RequestMapping("/api")
public class ParamController {
  @RequestMapping("/param")
  public String requestParamDemo(@RequestParam("username") String name) {
    return "Hello, " + name + "!";
  }
}

这个时候,我们在 postman 上传递的 username 值,其实就是赋予了变量 name,如下👇

@RequestBody 注解

@RequestBody 注解 注解用于处理 HTTP 请求体的内容映射到方法的参数上。使用 @RequestBody 注解可以将请求体的内容转化为相应的 Java 对象,以便在方法中处理。如下例子:

我们先创建一个 bean 类:

java 复制代码
@Setter
@Getter
public class Person {
  String username;
}

然后创建一个 controller

java 复制代码
@RestController
@RequestMapping("/api")
public class requestBodyController {
  @RequestMapping("/request-body")
  public String requestBodyDemo(@RequestBody Person person) {
      return "Hello, " + person.getUsername() + "!"; 
  }
}

postman 上请求接口 http://localhost:8080/api/request-body,在 Body 请求输入 json 数据,如下:

总结

本文中,我们一起学习了 @PathVariable 注解、RequestParam 注解和 RequestBody 注解来处理 HTTP 请求的传递参数。本文中的案例,我们都是使用了 Get 请求来模拟,但是实际上,RequestBody 用得更多的是在 POST 新增记录和 PUT 修改记录的情况。三个注解搭配使用,完成参数的传递。

相关推荐
曹牧24 分钟前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
passerby606129 分钟前
完成前端时间处理的另一块版图
前端·github·web components
KYGALYX31 分钟前
服务异步通信
开发语言·后端·微服务·ruby
掘了36 分钟前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅39 分钟前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅1 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
爬山算法1 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty7251 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎1 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄1 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea