Spring WEB请求的参数处理与基本注解
注解:
• @PathVariable 获取请求路径参数
// 使用变量定义请求路径中的值,必须是GET请求
@GetMapping("/car/{id}/{username}")
public Map<String, Object> car(@PathVariable("id") String id,
@PathVariable("username") String username,
// PathVariable的注解中标明,如果参数是map,也可以用map来接收参数,
// spring会把请求路径中的变量name和value构建到map中,但map必须是<String, String>
@PathVariable Map<String, String> pv){
Map<String, Object> map = new HashMap<>();
map.put("id", id);
map.put("username", username);
map.put("pv", pv);
return map;
}
在页面中请求http://localhost:8080/car/1/zhangsan,后端接口中即可获得id和username对应的值。
{"pv":{"id":"1","username":"zhangsan"},"id":"1","username":"zhangsan"}
• @RequestHeader 获取请求头信息
@GetMapping("/car/{id}/{username}")
public Map<String, Object> car(@PathVariable("id") String id,
@PathVariable("username") String username,
@PathVariable Map<String, String> pv,
// 获取请求头中的Cookie
@RequestHeader("Cookie") String cookie,
// 获取所有请求头信息
@RequestHeader Map<String, String> headers){
Map<String, Object> map = new HashMap<>();
map.put("cookie", cookie);
map.put("headers", headers);
return map;
}
在页面中请求http://localhost:8080/car/1/zhangsan,后端接口中即可获得对应的值。
• @RequestParam 获取请求参数
// @RequestParam获取的是 & 分割的参数值
@GetMapping("/car")
public Map<String, Object> car(@RequestParam("age") String age,
// 也可以是列表,就是表单中的多选框
@RequestParam("interests") List<String> interests,
// 和其他注解一样,如果没有明确指定某个参数,可以用map接收
@RequestParam Map<String, String> params){
Map<String, Object> map = new HashMap<>();
map.put("age", age);
map.put("interests", interests);
map.put("params", params);
return map;
}
在页面中请求http://localhost:8080/car?age=18&interests=game&interests=sing,后端接口中即可获得对应的值。
如果前端发送的是 post 请求,并且表单传输,也就是说请求头 Content-Type 的值是 application/x-www-form-urlencoded,这种情况也可以用 @RequestParam 获取值,
如果前端是 json 传值,就需要用 @RequestBody 取值
• @CookieValue 获取Cookie数据
@GetMapping("/car")
public Map<String, Object> car(@CookieValue("Idea-6ca6da27") String Idea_6ca6da27,
// 获取cookie所有值
@CookieValue Cookie cookie){
Map<String, Object> map = new HashMap<>();
map.put("Idea_6ca6da27", Idea_6ca6da27);
map.put("cookie", cookie);
return map;
}
• RequestBody 获取表单参数
// 表单使用POST请求
@PostMapping("/car") // 获取表单提交内容,因为提交的是一个json串,所以可以用String接收
public Map<String, Object> postMethod(@RequestBody String content){
Map<String, Object> map = new HashMap<>();
map.put("content", content);
return map;
}
页面使用表单提交,即可获取表单参数,但是这种方式后端获取到表单内容不好处理,所以一般使用下面方式定义后端接口:
@PostMapping("/car") // Person属性和表单属性保持一致,这种情况也可以不加@RequestBody注解
public Map<String, Object> postMethod(@RequestBody Person person){
Map<String, Object> map = new HashMap<>();
map.put("person", person);
return map;
}