HTTP各种参数发送
利用Idea的HttpClient向SpringBoot发起各种请求参数。后端使用@RequestParam,@ModelAttribute,@PathVariable,@RequestBody,@RequestPart去接收。
spring mvc 中的参数接受之 GET 请求
Get 请求是没有 body 的,参数都是放在 url 上面。 根据在 url 参数格式不同,一共有下面这几种
- Path Variable
- 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 格式大概可以分为两种,
- 一种是只能传输一个对象
- 一种是可以传输多个对象。
application/json,application/x-www-form-urlencoded 属于第一种
multipart/form-data 属于第二种。
最后更新于 2026-02-18 18:09