Spring Boot中的 6 种API请求参数读取方式

​

博客主页: 南来_北往

🔥系列专栏:Spring Boot实战


前言

在利用Spring Boot框架开发应用程序接口时,从客户端请求中提取参数是一项基础而关键的任务。Spring Boot为了迎合各式各样的接口设计需求,提供了多样化的机制以供开发者选择。本文将详细梳理六种主流的请求参数读取方法。若您所掌握的方式尚未达到此数目,不妨参考本文以填补知识的空白;倘若您所了解的途径超出六种,欢迎分享您的见解,共同进步。

@RequestParam

该注解用于处理URL中的查询参数,即URL中?后面的参数。例如,在请求/user?name=didispace中,使用@RequestParam("name")可以把"name"参数的值传递给方法参数。

java 复制代码
@GetMapping("/user")
@ResponseBody()
public User findUserByName(@RequestParam("name") String name){ 
    return userRepo.findByName(name);
}

@PathVariable

此注解用于获取RESTful风格API路径中的变量。例如,对于路径/user/1,服务器端可以用@PathVariable("id")来获取URL中的id值。

java 复制代码
@GetMapping("/user/{id}")
@ResponseBody()
public User findUserById(@PathVariable("id") String id){ 
    return userRepo.findById(id);
}

@MatrixVariable

这个注解用于解析矩阵URI中的变量,矩阵参数出现在路径后面并用分号(;)隔开。例如,请求/books/reviews;isbn=1234;topN=5;可以通过@MatrixVariable加载并解析这些参数。

java 复制代码
@GetMapping("/books/reviews")
@ResponseBody()
public List<BookReview> getBookReviews( 
  @MatrixVariable String isbn,  @MatrixVariable Integer topN) {
  return bookReviewsLogic.getTopNReviewsByIsbn(isbn, topN);
}

@RequestBody

此注解常用于处理POST或PUT请求中的复杂数据负载,即请求体中的数据。例如,客户端发送JSON格式的数据,服务器端可以用@RequestBody接收并转换为对应的Java对象。

java 复制代码
@PostMapping("/add")
public boolean addAccounts(@RequestBody List<Account> accounts) throws SQLException {
     accounts.stream().forEach(a -> {
         a.setCreatedOn(Timestamp.from(Instant.now()));
         a.setLastLogin(Timestamp.from(Instant.now()));
     });
     return notificationLogic.addAccounts(accounts);
}

@RequestHeader

此注解用于获取HTTP请求头中的信息。比如可以将请求头中的Authorization信息通过@RequestHeader("Authorization")注入到方法参数中。

java 复制代码
@GetMapping("/user")
@ResponseBody()
public List<User> getUserList(@RequestHeader("Authorization") String authToken) {
     return userRepo.findAll();
}

@CookieValue

当需要与客户端保持一些状态信息时,可以使用Cookie。@CookieValue注解用于获取特定Cookie项的值。这对于有状态的会话管理非常有用。

java 复制代码
@GetMapping("/user")
@ResponseBody()
public List<User> getUserList(@CookieValue(name = "SessionId") String sessionId) {
     return userRepo.findAll();
}

总之,这六种参数读取方式极大地增强了Spring Boot应用对不同类型请求的处理能力,使得开发人员能够根据不同的业务需求选择最合适的数据传递方式。

相关推荐
A-刘晨阳1 分钟前
金仓时序数据库:以高效压缩、快速写入与时序优化,破解工业海量数据管理难题
数据库·时序数据库
2603_965148112 分钟前
终极清单:构建自动化选品比价系统的所有组件与资源
大数据·运维·数据库·数据挖掘·自动化
北城笑笑3 分钟前
Server 18 ,Nginx 双服务器 HTTP转HTTPS 代理实战( HTTP 地址换 HTTPS 域名 )
运维·服务器·前端·后端·nginx·http·https
紫洋葱hh3 分钟前
Go 入门基础:类型、变量与运算符
开发语言·后端·ai·golang
随性而行3607 分钟前
企业微信API接口开发实战:如何实现消息回调接收与业务事件处理?
java·前端·python·微信·机器人·企业微信
美味蛋炒饭.9 分钟前
java八股面试(3)
java·开发语言·面试
IT研究室12 分钟前
最新计算机毕业设计选题推荐-基于spring boot的美食配送平台-网站-文档指导-Java-springboot
java·spring boot·课程设计
打工仔折腾 AI13 分钟前
Qt网络编程实战:UDP、TCP到HTTP的落地经验与选型
网络·人工智能·后端·python·qt·udp·ai agent 实战
打工仔折腾 AI13 分钟前
SQL 编辑器不是高级记事本:KStudio 与 KSQL Developer 的建表与增删改查手法
数据库·人工智能·后端·python·sql·编辑器·ai agent 实战
CNSSIRD数据库18 分钟前
中国省地县乡四级行政建制及区划代码-2025年版
大数据·数据库·数据分析·论文笔记