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 修改记录的情况。三个注解搭配使用,完成参数的传递。

相关推荐
超级小忍33 分钟前
Spring Boot 配置文件常用配置属性详解(application.properties / application.yml)
java·spring boot·后端
麦兜*34 分钟前
基于Spring Boot的审计日志自动化解决方案,结合SpEL表达式和AOP技术,实现操作轨迹自动记录,并满足GDPR合规要求
java·jvm·spring boot·后端·spring·spring cloud·maven
Victor35634 分钟前
MySQL(167)如何理解MySQL的Redo Log和Undo Log?
后端
Victor35635 分钟前
MySQL(168)MySQL如何实现崩溃恢复?
后端
青云交1 小时前
Java 大视界 -- Java 大数据机器学习模型在金融信用评级模型优化与信用风险动态管理中的应用(371)
java·大数据·机器学习·信用评级·动态风控·跨境金融·小贷风控
求知若渴,虚心若愚。4 小时前
Error reading config file (/home/ansible.cfg): ‘ACTION_WARNINGS(default) = True
linux·前端·ansible
LinDaiuuj4 小时前
最新的前端技术和趋势(2025)
前端
二哈喇子!5 小时前
若依【(前后端分离版)SpringBoot+Vue3】
java·spring boot·后端
paopaokaka_luck5 小时前
婚纱摄影管理系统(发送邮箱、腾讯地图API、物流API、webSocket实时聊天、协同过滤算法、Echarts图形化分析)
vue.js·spring boot·后端·websocket·算法·echarts
一只小风华~5 小时前
JavaScript 函数
开发语言·前端·javascript·ecmascript·web