1.接收请求参数总结,Spring MVC能够获取HTTP请求参数的位置应该有四个:
以下参数都可以在`HttpServletRequest`对象中获取。
-
获取请求行
request-URL
中的path参数或者query参数//如这条请求行:GET http://localhost:8080/test/param1?name=jhp&age=22; request.getMethod(); // GET request.getRequestURL(); //http://localhost:8080/test/param1 request.getRequestURI(); //test/param1 request.getQueryString(); //获取query参数, name=jhp&age=22
-
获取请求头(headers)中的请求头参数
//如这条普通的请求,下面展示HTTP协议的一部分: GET http://localhost:8080/test HTTP/1.1 host: 101.43.143.8 request.getHeader("host"); //localhost:8080 request.getHeader("accept-encoding"); //gzip, deflate, br
-
获取请求体(RequestBody)中的请求体参数
3.1 HTTP协议中除了POST和PUT方法具有请求体以外,其它方法都没有请求体。
因为请求体可以承载复杂的参数传递,所以请求体的数据类型有多种分类,常用的三种:application/x-www-form-urlencoded
application/json
multipart/form-data
他们都适用于简单或复杂文本数据的传递,可如果参数中包含文件,则必须使用第三种form-data格式。
private static final String savePath = "/Users/jihaipeng/IdeaProjects/SGBlog/sangeng-blog/src/main/resources/"; //multipart/form-data @PostMapping("/getFile") public String getFile(@RequestBody MultipartFile file, String saveName) { //这里的路径需要一直到保存的文件名。 File dest = new File(savePath + saveName); try { file.transferTo(dest); return "return in try" + file.getName(); } catch (IOException e) { e.printStackTrace(); } finally { //在这里返回。try里返回无效 return "return in finally" + file.getOriginalFilename(); } }
-
获取cookies中的参数,其本质也是
请求头传参
/* 请求报文: GET /user/zhangsan/12 HTTP/1.1 Host: localhost:8080 Cookie: JSESSIONID=3jd6f92h47syx64h58f2nduyso1nz63a; id=12345678 这里的Cookie是请求首部字段:服务器接收该Cookie中的信息。 Cookie字段的值是一串由分号分割的键值对。 Cookie的初始化由服务器完成并添加在响应首部, SetCookie.《图解HTTP》 Page 135. */
-
注意点以及同名参数注入情况总结
@RequestParam
与不加注解都可以把请求参数中的值注入到函数形参中。区别在于@RequestParam
是严格根据名称匹配注入的,系统不会自动把值注入对象中的字段。不加注解会自动解析对象中的参数。如以下情况// http://localhost:8080/test?name=jhp&age=20 @GetMapping("/test") //这里如果加@RequestParam没法根据名称注入参数,系统不会自动把值注入对象中的字段。 public String test(User user);
- 同名参数注入情况
- 请求参数(RequestParam)和请求体(RequestBody)中同时存在同名函数
其他懒得记了。记住各参数不要同名就行
。
2.参数绑定总结
把Http请求中的参数绑定到方法形参用到的类以及注解如下。
1. 不使用任何注解或类
:绑定RequestParam
中对应名称的参数/也可以绑定请求体(Content-type:
)以x-www-form-urlencoded
或form-data
格式发送的数据。
2. HttpServletRequest
:自动绑定该类对象,使用HttpServletRequest手动获取参数。
3. @PathVariable
:绑定路径中的参数
4. @RequestParam
:绑定查询参数(query)或请求体中(Content-type: application/form-data; application/x-www-urlencoded)
的参数。
5. @RequestHeader
:绑定请求头中的参数
6. @RequestBody
:绑定请求体中的参数.主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据).
请求首部中Content-type
应为 application/json
.不能是application/form-data
或application/x-www-form-urlencoded
。
8. @CookieValue
:绑定cookie中的参数