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

SpringBoot的6种API请求参数读取方式

@RequestParam

用来加载URL中?之后的参数

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

@GetMapping("/user")
@ResponseBody()
public User findUserByName(@RequestParam("name") String name) {

   return userRepo.findByName(name);
}

@PathVariable

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

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

@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 中用; 分割的参数

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

@RequestBody

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

@PostMapping("/add")
public boolean addAccounts(@RequestBody List<Account> accounts) throws SQLException {

    accounts.stream().forEach(a -> {
       a.setCreateOn(Timestamp.from(Instant.now()));
       a.setLastLogin(Timestamp.from(Instant.now()));

    });
    return notificationLogic.addAccounts(accounts);


}

@RequestHeader

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

@GetMapping("/user")
@RequestBody()
public List<User> getUserList(@RequestHeader("Authorization") String authToken) {

   return userRepo.findAll();
}

@CookieValue 

 当我们需要与客户端保持有状态的交互时,就需要用到Cookie ,此时,服务端读取Cookie 数据的时候,就可以像下面这样用@CookieValue 来读取Cookie 中的SessionId 数据

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


http://www.kler.cn/a/468532.html

相关文章:

  • AI Agent 开发共学招募 | 来 Sui 上探索自治智能的边界
  • 51c自动驾驶~合集45
  • 安卓漏洞学习(十六):unicorn在逆向中的使用
  • windeployqt.exe打包qt程序总结(MSVC)
  • Neo4j的部署和操作
  • Jetpack Compose 学习笔记(四)—— CompositionLocal 与主题
  • 【C++】P1428 小鱼比可爱
  • Unity开发2d游戏全套教程[入门案例]
  • 0-基于蚁群优化和带注意力机制的循环神经网络的新型混合算法用于解决旅行商问题(HAL science)(完)
  • 【数据结构与算法:五、树和二叉树】
  • Springboot使用Rabbitmq的延时队列+死信队列实现消息延期消费
  • 快速将索尼手机联系人导出为 HTML 文件
  • 2024 年度时序数据库 IoTDB 论文总结
  • From matplotl1b.path 1mport failed to import ImportError:numpy.core.multiarray
  • CentOS — 群组管理
  • NVIDIA DLI课程《NVIDIA NIM入门》——学习笔记
  • 【USRP】教程:在Macos M1(Apple芯片)上安装UHD驱动(最正确的安装方法)
  • 【C++】矩阵转置问题详解与优化
  • 机器学习导论笔记
  • Hadoop•配置网络克隆虚拟机
  • 学英语学压测:03jmeter组件-采样器、逻辑控制器
  • Go Ebiten小球弹性碰撞代码示例
  • 使用Dinky快速提交Flink operator任务
  • 【zig】0.zig的下载安装
  • 【Python基础语法】
  • Leecode刷题C语言之设计一个ATM机器