当前位置: 首页 > news >正文

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

 ​

 博客主页:     南来_北往

🔥系列专栏:Spring Boot实战


前言

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

@RequestParam

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

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

@PathVariable

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

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

@MatrixVariable

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

@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对象。

@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")注入到方法参数中。

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

@CookieValue

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

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 核心线程创建之后是否受keepAliveTime影响?
  • SRv6 和IGP/BGP协议区别
  • 自制熊猫烧香进阶
  • centos安装python 3.9
  • 【diffusers极速入门(五)】扩散模型中的 Scheduler(noise_scheduler)的作用是什么?
  • react函数学习——useState函数
  • 51单片机嵌入式开发:22、STC89C52R控制 实现单总线温度传感器DS18b20的温度读取
  • UltraEdit v27文本代码程序编辑器免费版下载安装教程(亲测可用)
  • Java每日一练,技术成长不间断
  • 第十章 计算机网络——应用层
  • 递归求数组和
  • vscode+cmake+msvc+vcpkg的入门使用
  • C++设计模式笔记(内附可运行代码示例)
  • Github 2024-07-25开源项目日报 Top10
  • ubuntu24.04 LTS安装BackupPC备份软件
  • 《剑指offer》分解让复杂问题更简单
  • 【个人向】《HTTP图解》阅后小结
  • 2017前端实习生面试总结
  • Android开源项目规范总结
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Unix命令
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Web Storage相关
  • zookeeper系列(七)实战分布式命名服务
  • 从setTimeout-setInterval看JS线程
  • 反思总结然后整装待发
  • 离散点最小(凸)包围边界查找
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 深入浅出Node.js
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​【已解决】npm install​卡主不动的情况
  • ​520就是要宠粉,你的心头书我买单
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • #70结构体案例1(导师,学生,成绩)
  • (1)(1.11) SiK Radio v2(一)
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (42)STM32——LCD显示屏实验笔记
  • (7)svelte 教程: Props(属性)
  • (C#)获取字符编码的类
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (pycharm)安装python库函数Matplotlib步骤
  • (办公)springboot配置aop处理请求.
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (力扣题库)跳跃游戏II(c++)
  • (三) diretfbrc详解
  • (十八)三元表达式和列表解析
  • (四) 虚拟摄像头vivi体验
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (学习日记)2024.01.19
  • (转)关于如何学好游戏3D引擎编程的一些经验