利用Idea的HttpClient向SpringBoot发起各种请求参数。后端使用@RequestParam@ModelAttribute@PathVariable@RequestBody@RequestPart去接收。

spring mvc 中的参数接受之 GET 请求

Get 请求是没有 body 的,参数都是放在 url 上面。 根据在 url 参数格式不同,一共有下面这几种

  1. Path Variable
  2. Query

path variable

使用 @PathVariable

      GET http://localhost:7720/user/find/123/abc
                                    \ /
                                这里的"123"和"abc"是参数
    

这种传参格式就如同名字一样"路径变量",参数在路径上。

针对这种传参方式后端可以这么接受。

          // 在路径中用id占位,代表这个地方将会是参数
    @GetMapping("find/{id}/{username}")
    // 方法上面通过占位名称得到参数
    public R<Boolean> pathVariable(@PathVariable String id, @PathVariable String username) {
        log.info(id);
        log.info(username);
        return R.ok(true);
    }
    

query 传参

使用 @RequestParam

      ### GET http://localhost:7720/user/find?username=yupi&password=123456
    

在路径的最后用 “?” 隔开要传输的参数。 通过 “&” 分割多个 key=value

          @GetMapping("find")
    // 通过key接受参数
    public R<Boolean> get(@RequestParam String username, @RequestParam String password) {
        log.info(username);
        log.info(password);
        return R.ok(true);
    }
    

使用 @ModelAttribute

如果现在需要做一个用户搜索功能,前端会传 pageNum(页数), pageSize(每页大小), keyword(关键词),startTime(创建日期)。

      GET http://localhost:7720/user/search?pageNum=1&pageSize=10
&keyword=yupi&startTime=Fri Apr 29 2022 21:16:50
    

使用 @RequestParam,我们需要在接口上接受四个参数,这样会显得接口过于庞大,不雅观。

          @GetMapping("search")
    public R<Boolean> search(@RequestParam Integer pageSize, @RequestParam Integer pageNum, @RequestParam String keyword, @RequestParam Date startTime) {

        return R.ok(true);
    }
    

改造一下,我们可以创建一个 SearchDto

      @Data
public class SearchDto {
    Integer pageNum;
    Integer pageSize;
    String keyword;
    Date startTime;
}
    

通过 @ModelAttribute 就可以接受多个 query 参数

          @GetMapping("search")
    public R<Boolean> search(@ModelAttribute SearchDto searchDto) {
        log.info(searchDto.toString());
        return R.ok(true);
    }
    

使用 @ModelAttribute@RequestParam

刚刚我们做的是用户搜索功能,现在假设我们需要做文章搜索功能。文章搜索的过滤条件比用户搜索多了一个 category(文章类别)。

      GET http://localhost:7720/article/search?pageNum=1&pageSize=10
&keyword=spring boot&startTime=Fri Apr 29 2022 21:16:50&category=科技
    

这时我们可以再创建一个 ArticleSearchDto 然后继承 SearchDto

      @Data
public class ArticleSearchDto extends SearchDto{
    String category;
}
    

然后在文章搜索接口上接受 ArticleSearchDto

          @GetMapping("search")
    public R<Boolean> search(@ModelAttribute ArticleSearchDto searchDto) {
        log.info(searchDto.toString());
        return R.ok(true);
    }
    

但是这样真的方便吗?因为多出一个字段就要再建立一个类,是不是有点麻烦了。我们完全可以把@ModelAttribute@RequestParam 结合起来使用

          @GetMapping("search")
    // @RequestParam 获取新增的过滤条件
    public R<Boolean> search(@ModelAttribute SearchDto searchDto, @RequestParam String category) {
        log.info(searchDto.toString());
        log.info(category);
        return R.ok(true);
    }
    

spring mvc 中的参数接受之 POST 请求

POST 请求的参数可以放在 url 上,也可以放在 body 种。 POST 请求的 body 格式大概可以分为两种,

  1. 一种是只能传输一个对象
  2. 一种是可以传输多个对象。

application/json,application/x-www-form-urlencoded 属于第一种

multipart/form-data 属于第二种。

加载中...

声明

作者: liyao

版权:本博客所有文章除特别声明外,均采用CCBY-NC-SA4.O许可协议。转载请注明!

最后更新于 2026-02-18 18:09 history