注解:
@PathVariable、@RequestHeader、@ModelAttribute、@RequstParam、@MatrixVariable、@RequestBody
1、@PathVariable
符合rest风格的api传值方式,有多个变量时,也可以接受一个Map(前提:参数必须为String类型),springboot会自动封装到Map里
@RequestMapping(value = "/param/{userId}/{username}", method = RequestMethod.GET)
public Map testParams(
@PathVariable("userId") int id,
@PathVariable("username") String name,
@PathVariable Map<String, String> userInfo
) {
Map<String, Object> obj = new HashMap<>();
obj.put("id", id);
obj.put("name", name);
obj.put("userInfo", obj);
return obj;
}
2、@RequestHeader
获取请求头信息,可获取单个key value,也可以获取多个请求头信息。
@RequestMapping(value = "/param/{userId}", method = RequestMethod.GET)
public Map testParams(
@PathVariable("userId") int id,
@RequestHeader("Host") String userHost,
@RequestHeader Map<String, String> objHeader
) {
Map<String, Object> obj = new HashMap<>();
obj.put("id", id);
obj.put("host", userHost);
obj.put("headers", objHeader);
return obj;
}
3、@RequstParam
这个注解通常用在get方法请求上。
作用:将请求参数绑定到你的控制器的方法的参数上
语法:
@RequstParam(value = "参数名", require ="true/false", defaultValue = "默认值")
value:参数名
required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。
defaultValue: 默认参数值,如果设置了该值,require = true,将失效,
获取路径拼接参数,可单个获取,也可以以Map类型形式获取
@RequestMapping(value = "/param", method = RequestMethod.GET)
public Map testParams(
@RequestParam("userId") int id,
@RequestParam("username") String name,
@RequestParam Map<String, String> params
) {
Map<String, Object> obj = new HashMap<>();
obj.put("id", id);
obj.put("name", name);
obj.put("params", params);
return obj;
}
补充:
在文件上传时,如果携带额外参数,可以使用@RequstParam(value="额外参数名")来接收
它和@RequstPart区别:
(1)@RequstPart这个注解用multipart/form-data表单提交请求的方法上;
(2)支持的请求方法的方式MultipartFile,属于Spring的MultipartResolver类。这个请求是通过http协议传输的。
(3)@RequestParam也同样支持multipart/form-data请求。
(4)他们最大的不同是,当请求方法的请求参数类型不再是String类型的时候。
(5)@RequestParam适用于name-valueString类型的请求域,@RequestPart适用于复杂的请求域(像JSON,XML)。
4、@RequestBody
获取post请求体中的内容
@RequestMapping(value = "/param", method = RequestMethod.POST)
public Map testParams(@RequestBody Map<String, String> userInfo) {
Map<String, Object> obj = new HashMap<>();
obj.put("userInfo", userInfo);
return obj;
}