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

使用Spring Boot开发API的时候,读取请求参数是服务端编码中最基本的一项操作,Spring Boot中也提供了多种机制来满足不同的API设计要求。

接下来,就通过本文,为大家总结6种常用的请求参数读取方式。如果你发现自己知道的不到5种,那么赶紧来查漏补缺一下。如果你知道的不止6种,那么告诉大家,一起互相学习一下吧~

@RequestParam

这是最最最最最最常用的一个了吧,用来加载URL中?之后的参数。

比如:这个请求/user?name=didispace 就可以如下面这样,使用@RequestParam来加载URL中的name参数

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

@PathVariable

这是RESTful风格API中常用的注解,用来加载URL路径中的参数

比如:这个请求/user/1 就可以如下面这样,使用@PathVariable来加载URL中的id参数

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

@MatrixVariable

这个我们用的并不是很多,但一些国外系统有提供这类API参数,这种API的参数通过;分割。

比如:这个请求/books/reviews;isbn=1234;topN=5; 就可以如下面这样,使用@MatrixVariable来加载URL中用;分割的参数

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

@RequestBody

这也是最常用的一个注解,用来加载POST/PUT请求的复杂请求体(也叫:payload)。比如,客户端需要提交一个复杂数据的时候,就要将这些数据放到请求体中,然后服务端用@RequestBody来加载请求体中的数据

less 复制代码
 @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

@RequestHeader注解用来加载请求头中的数据,一般在业务系统中不太使用,但在基础设施的建设中会比较常用,比如传递分布式系统的TraceID等。用法也很简单,比如,假设我们将鉴权数据存在http请求头中,那么就可以像下面这样用@RequestHeader来加载请求头中的Authorization参数

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

好了,今天的分享就到这里。这些方式你都知道吗?如果有学到新知识,欢迎点赞支持。如果你还知道其他方式,也欢迎评论分享。

相关推荐
Max_uuc32 分钟前
【架构心法】嵌入式系统的“防御性编程”:如何构建一个在灾难中存活的系统
架构
lbb 小魔仙37 分钟前
面向 NPU 的高性能矩阵乘法:CANN ops-nn 算子库架构与优化技术
线性代数·矩阵·架构
是码龙不是码农1 小时前
支付防重复下单|5 种幂等性设计方案(从初级到架构级)
java·架构·幂等性
云边有个稻草人1 小时前
CANN异构架构:以ops-nn为翼,驱动AIGC底层计算新突破
架构·aigc
心疼你的一切1 小时前
模态交响:CANN驱动的跨模态AIGC统一架构
数据仓库·深度学习·架构·aigc·cann
晚霞的不甘2 小时前
CANN × ROS 2:为智能机器人打造实时 AI 推理底座
人工智能·神经网络·架构·机器人·开源
jiet_h2 小时前
后端 Verticle 架构实战:用 NeonBeeDeployable 推送一条通知
架构
程序猿追2 小时前
CANN ops-math仓库解读 数学算子的底层支撑与高性能实现
人工智能·架构
芷栀夏2 小时前
从 CANN 开源项目看现代爬虫架构的演进:轻量、智能与统一
人工智能·爬虫·架构·开源·cann
程序猿追3 小时前
深度剖析 CANN ops-nn 算子库:架构设计、演进与代码实现逻辑
人工智能·架构