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


    使用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 getBookReviews( 
      @MatrixVariable String isbn,  @MatrixVariable Integer topN) {
      return bookReviewsLogic.getTopNReviewsByIsbn(isbn, topN);
    }
    

    @RequestBody

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

    @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

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

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

    @CookieValue

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

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

    好了,今天的分享就到这里。这些方式你都知道吗?如果有学到新知识,欢迎点赞支持。如果你还知道其他方式,也欢迎评论分享。如果您学习过程中如遇困难?可以加入我们超高质量的Spring技术交流群,参与交流与讨论,更好的学习与进步!更多Spring Boot教程可以点击直达!,欢迎收藏与转发支持!

    欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

  • 相关阅读:
    【Linux】Linux小程序(进度条)、git命令行的使用及gdb的使用
    JAVA - 自然排序 Comparable
    区块链论文速读A会-ATC 2024 如何降低以太坊存档节点的存储要求?
    腾讯云健康码+行程码OCR文字识别
    Mysql架构 MMM与MHA区别
    【Qt常用控件】—— 多元素控件
    Solidity智能合约开发 — 4.2-合约的fallback和函数重载
    MySQL | SELECT
    考试周刊杂志考试周刊杂志社考试周刊编辑部2022年第39期目录
    高通导航器软件开发包使用指南(15)
  • 原文地址:https://www.cnblogs.com/didispace/p/18207788