Spring Boot中的 6 种API请求参数读取方式
创始人
2024-11-05 00:12:07

 ​

 博客主页:     南来_北往

🔥系列专栏: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 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 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 getUserList(@RequestHeader("Authorization") String authToken) {      return userRepo.findAll(); }

@CookieValue

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

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

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

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...