2. 获取参数
获取单个参数
学习 servlet 时获取参数的写法:
@RestController
@RequestMapping("/user")
public class UserController {
//传统写法获取请求中的参数
@RequestMapping("/getname") //这里不建议使用大小写, 可以用下划线来区分
public String getName(HttpServletRequest request) {
return "Name : " + request.getParameter("name");
}
}
通过 url 传递参数:

通过注解获取:
@RestController
@RequestMapping("/user")
public class UserController {
//直接获取 url 中的参数
//当该路由被触发后,执行到方法时
//就会对 name 进行匹配,直接对 name 进行赋值
@RequestMapping("/getname2")
public String getName2(String name) {
return "Name : " + name;
}
}

获取多个参数
其实获取多个参数和获取单个参数差不多:
@RestController
@RequestMapping("/user")
public class UserController {
//在传参时,注意参数的命名与要获取的参数名一致
@RequestMapping("/getname3")
public String getName3(String name, Integer age) {
return "Name : " + name + "age : " + age;
}
}
不传参数就默认为 null


传递对象
顾名思义,就是将参数当做一个对象的部分属性来接收,在接收时我们新建一个 model 层,来存放所需要的对象:

@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping("/add")
public User add(User user) {
return user; //将得到的对象返回回去
}
}
@Data 注解是个组合注解,它等于:@Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor + @NoArgsConstructor
添加了它就不需要我们自己写 Getter 和 Setter 方法了,减少重复工作。

当后端进行接收数据时,就会将参数和 user 里的属性进行对比,发现属性名称与参数的 key 相同就会进行赋值。
当对象返回前端时,因为前端是用 json 来表示对象的,所以返回的对象就转化为 json 格式 :

表单传参
其实表单传参和 url 传参区别就是传递参数的位置不一样,对于后端来说都一样,我们可以用 Postman 来构造请求:

后端参数重命名
有时候前端传递的 key 你觉得不合理,想改个顺眼的名字,就可以对传递过来的参数重命名,当然前端的参数是不变的。(注意: 对象不能重命名)
@RestController
@RequestMapping("/user")
public class UserController {
//将前端参数 y 改为 name,并由 name 接收
@RequestMapping("/name")
public String name(@RequestParam("y") String name) {
return name;
}
}

这里就有一个问题,如果我不传这个 y 就会报错:

在 @RequestParam 中,参数默认是必传的:

如果我们需求是参数非必传则可以进行如下修改:
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping("/name")
public String name(@RequestParam(value = "y",required = false) String name) {
return name;
}
}
这样就不会报错了:

@RequestBody 接收 JSON 对象
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping("/get_json")
public User getJson(@RequestBody User user) {
return user;
}
}
使用 Postman 构造对象并发送 :

@PathVariable 获取 URL 中的参数
@RestController
@RequestMapping("/user")
public class UserController {
//{aid} 中的 aid 是用来接收参数的
@RequestMapping("/get_url/{aid}")
//下面的 "aid" 是将参数名为 aid 的参数赋值给后面的 aid
//这里两个 aid 名字相同,可以省略参数名("aid")不写
public Integer getUrl(@PathVariable("aid") Integer aid) {
return aid;
}
}

当然了, 还可以传递多个参数 :
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping("/get_url2/{aid}/{name}")
public String getUrl2(@PathVariable() Integer aid, @PathVariable String name) {
return "aid: " + aid + " name: " + name;
}
}
