ToB企服应用市场:ToB评测及商务社交产业平台

标题: Spring Boot中的 6 种API请求参数读取方式 [打印本页]

作者: 西河刘卡车医    时间: 2024-7-24 08:28
标题: Spring Boot中的 6 种API请求参数读取方式
使用Spring Boot开辟API的时间,读取请求参数是服务端编码中最根本的一项操作,Spring Boot中也提供了多种机制来满意差异的API设计要求。
接下来,就通过本文,为各人总结6种常用的请求参数读取方式。如果你发现自己知道的不到6种,那么赶紧来查漏补缺一下。如果你知道的不止6种,那么告诉各人,一起相互学习一下吧~
@RequestParam

这是最最最最最最常用的一个了吧,用来加载URL中?之后的参数。
比如:这个请求/user?name=didispace 就可以如下面这样,使用@RequestParam来加载URL中的name参数
  1. @GetMapping("/user")
  2. @ResponseBody()
  3. public User findUserByName(@RequestParam("name") String name){ 
  4.     return userRepo.findByName(name);
  5. }
复制代码
@PathVariable

这是RESTful风格API中常用的注解,用来加载URL路径中的参数
比如:这个请求/user/1 就可以如下面这样,使用@PathVariable来加载URL中的id参数
  1. @GetMapping("/user/{id}")
  2. @ResponseBody()
  3. public User findUserById(@PathVariable("id") String id){ 
  4.     return userRepo.findById(id);
  5. }
复制代码
@MatrixVariable

这个我们用的并不是很多,但一些国外系统有提供这类API参数,这种API的参数通过;分割。
比如:这个请求/books/reviews;isbn=1234;topN=5; 就可以如下面这样,使用@MatrixVariable来加载URL中用;分割的参数
  1. @GetMapping("/books/reviews")
  2. @ResponseBody()
  3. public List<BookReview> getBookReviews( 
  4.   @MatrixVariable String isbn,  @MatrixVariable Integer topN) {
  5.   return bookReviewsLogic.getTopNReviewsByIsbn(isbn, topN);
  6. }
复制代码
@RequestBody

这也是最常用的一个注解,用来加载POST/PUT请求的复杂请求体(也叫:payload)。比如,客户端必要提交一个复杂数据的时间,就要将这些数据放到请求体中,然后服务端用@RequestBody来加载请求体中的数据
  1. @PostMapping("/add")
  2. public boolean addAccounts(@RequestBody List<Account> accounts) throws SQLException {
  3.      accounts.stream().forEach(a -> {
  4.          a.setCreatedOn(Timestamp.from(Instant.now()));
  5.          a.setLastLogin(Timestamp.from(Instant.now()));
  6.      });
  7.      return notificationLogic.addAccounts(accounts);
  8. }
复制代码
@RequestHeader

@RequestHeader注解用来加载请求头中的数据,一样寻常在业务系统中不太使用,但在底子设施的建立中会比较常用,比如通报分布式系统的TraceID等。用法也很简朴,比如,假设我们将鉴权数据存在http请求头中,那么就可以像下面这样用@RequestHeader来加载请求头中的Authorization参数
  1. @GetMapping("/user")
  2. @ResponseBody()
  3. public List<User> getUserList(@RequestHeader("Authorization") String authToken) {
  4.      return userRepo.findAll();
  5. }
复制代码
@CookieValue

当我们必要与客户端保持有状态的交互时,就必要用到Cookie。此时,服务端读取Cookie数据的时间,就可以像下面这样用@CookieValue来读取Cookie中的SessionId数据
  1. @GetMapping("/user")
  2. @ResponseBody()
  3. public List<User> getUserList(@CookieValue(name = "SessionId") String sessionId) {
  4.      return userRepo.findAll();
  5. }
复制代码
好了,本日的分享就到这里。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4