引言
代码
先看如下两段基于@GetMapping注解的方法👇
1 | "/page") ( |
1 | "/{id}") ( |
说明
上面两段代码中:
- 共同点是都是针对Get请求的后端代码逻辑处理
- 主要的不同之处是对于Get请求参数的获取方式
- 第一段代码的完整请求路径是:http://localhost:8080/employee/page?page=1&pageSize=2
- 第二段代码的完整请求路径是:http://localhost:8080/employee/141242344443454456
后端用参数接收
第一种属于传统方式的Get请求参数获取方法,即参数跟在问号后面。
我们假有这样一段请求需要处理:http://localhost:8080/helloworld?name=张三
则Controller中的处理代码如下👇
1 | import org.springframework.web.bind.annotation.RequestParam; |
@RequestParam使用
这种方式涉及了@RequestParam注解的使用,关于该注解总结如下👇
不加@RequestParam,前端的参数名需要和后端控制器的变量名保持一致才能生效
不加@RequestParam,参数为非必传,加@RequestParam写法参数为必传。但@RequestParam可以通过@RequestParam(required = false)设置为非必传。
@RequestParam可以通过@RequestParam(“userId”)或者@RequestParam(value = “userId”)指定传入的参数名。
@RequestParam可以通过@RequestParam(defaultValue = “0”)指定参数默认值
如果接口除了前端调用还有后端RPC调用,则不能省略@RequestParam,否则RPC会找不到参数报错
访问时:
- 不加@RequestParam注解:url可带参数也可不带参数
- 加@RequestParam注解:url必须带有参数
后端用路径接收
第二种是典型的 RESTful 风格,ID参数值直接放在路径里面。
我们假有这样一段请求需要处理:http://localhost:8080/helloworld/张三
则Controller中的处理代码如下👇
1 | import org.springframework.web.bind.annotation.GetMapping; |
@PathVariable使用
通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的形参中。
若方法参数名称和需要绑定的url中变量名称一致时,可以简写:
1
2
3
4
5
6
7
8"/{id}") (
public R<Employee> getByID(@PathVariable Long id){
Employee employee = employeeService.getById(id);
if (employee != null) {
return R.success(employee);
}
return R.error("查询失败!");
}若方法参数名称和需要绑定的url中变量名称不一致时,写成:
1
2
3
4
5
6
7
8"/{id}") (
public R<Employee> getByID(@PathVariable("id") Long empId){
Employee employee = employeeService.getById(empId);
if (employee != null) {
return R.success(employee);
}
return R.error("查询失败!");
}用POJO实体类接收
此处定义一个简单的POJO如下👇
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20public class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
定义一个RestController如下👇
1 | import org.springframework.web.bind.annotation.RestController; |
现在给出一个GET请求:http://localhost:8080/helloworld?name=张三
则浏览器可以看到:name: 张三
后端用数组接收
1 | "/array") ( |
前端则调用url:localhost:8080/user/array?a=1&a=2&a=3
当然,这里也可用List
如果直接使用List
后端使用Map接收
1 | "/loginByMap") ( |
前端则调用url:localhost:8080/user/loginByMap?name=tom&age=12
⚠️值得注意的是,这里的map参数前需要加@RequestParam注解,用于将请求参数注入到map中。