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

开发 前端
@RequestHeader注解用来加载请求头中的数据,一般在业务系统中不太使用,但在基础设施的建设中会比较常用,比如传递分布式系统的TraceID等。

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

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

#@RequestParam

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

比如:这个请求/user?name=didispace 就可以如下面这样,使用@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,  @MatrixVariable 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.setCreatedOn(Timestamp.from(Instant.now()));
         a.setLastLogin(Timestamp.from(Instant.now()));
     });
     return notificationLogic.addAccounts(accounts);
}

#@RequestHeader

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

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

#@CookieValue

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

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

好了,今天的分享就到这里。这些方式你都知道吗?


https://www.didispace.com/article/spring-boot/spring-boot-rest-api-6-ways-to-pass-params.html

责任编辑:武晓燕 来源: 今日头条
相关推荐

2024-08-30 11:11:01

2024-12-18 16:19:51

2024-10-12 08:18:21

Spring接口组件

2017-06-26 10:35:58

前端JavaScript继承方式

2023-09-06 11:35:11

2019-05-16 13:00:18

异步编程JavaScript回调函数

2009-02-11 09:46:00

ASON网络演进

2022-12-06 10:39:43

Spring事务失效

2020-07-31 11:12:39

安全威胁网络攻击网络安全

2020-04-27 09:00:00

双因素认证身份认证生物识别

2022-01-14 10:34:50

黑客隐藏踪迹网络安全

2022-03-23 12:55:50

农业物联网

2019-07-19 07:33:57

供应链物联网IOT

2023-05-10 13:58:13

服务限流系统

2021-01-08 10:52:22

物联网万物互联IoT,Interne

2023-08-11 13:39:06

首席信息官IT领导

2022-03-28 20:57:31

私有属性class属性和方法

2023-10-30 11:53:37

继承JS父类

2018-10-19 10:30:51

SD-WAN软件定义广域网网络

2022-07-15 10:30:41

ITCIO
点赞
收藏

51CTO技术栈公众号