目录
1.获取参数
1.1获取单个参数
1.2获取多个参数
传参注意事项:
2.获取对象
3.后端参数重命名@RequestParam
4.获取JSON对象@RequestBody
5.从 URL 地址中获取参数 @PathVariable
6.上传文件 @RequestPart
7.获取Cookie/Session/Header
7.1 获取 Request 和 Response 对象
7.2 获取Cookie
(1)Servlet 获取 Cookie 的方法
(2)使用 @CookieValue 注解实现 Cookie 的读取
7.3 获取Header(请求头)中信息
(1)Servlet 获取 Header 的方法
(2)使用 @RequestHeader 注解实现 Header 的获取
7.4 存储和获取 Session
(1)Session 存储和 Servlet 类似,是使⽤ HttpServletRequest 中获取的
(2)获取 Session 方法1(Servlet 模式)
(3)获取 Seesion 方法2:@SessionAttribute
1.获取参数
1.1获取单个参数
在 Spring MVC 中可以直接用方法中的参数来实现传参:
@GetMapping("/hi") //等于@RequestMapping("/hi")
//都能实现映射的功能
public String sayHi(String name) {
return "Hi:" + name;
}
1.2获取多个参数
@GetMapping("/hi") //等于@RequestMapping("/hi")
//都能实现映射的功能
public String sayHi(String name,Integer v) {
return "Hi:" + name + " v:" + v;
}
传参注意事项:
在 Spring Boot(Spring MVC) 中传参一定要传包装类型,而非基础类型,否则传一个空的值就会出错, 并且这里的参数一定要和前端传递的参数名保持一致,否则就获取不到参数的值了
2.获取对象
并且Spring MVC可以自动实现参数对象的赋值,比如User对象;
@Data
public class User {
private int id;
private String name;
private int age;
//....
}
//普通对象
@GetMapping("/show-User")
public String showUser(User user){
return user.toString();
}
3.后端参数重命名@RequestParam
有些特殊情况下,前端传递的参数 key 和我们后端接收的 key 可以不一致,比如前端传递了一个 time 给后端,而后端又是用 createtime 字段来接收的,这样就会出现参数接收不到的情况,如果出现这种情况,我们就可以使用 @RequestParam 来重命名前后端的参数值
@GetMapping("/show-Time")
public String showTime(@RequestParam("t") String startTime,
@RequestParam(value = "t2") String endTime){
return "开始时间:" + startTime +" 结束时间:" + endTime ;
}
注意:
我们观察@RequestParam源码可以看到:
这里代表如果使用@RequestParam的话,前端一定要传递参数,否则就会报错,但是如果我们在代码中加入
就可以不用带参数了
4.获取JSON对象@RequestBody
服务器端实现 JSON 数据的接收需要使用 @RequestBody 注解:
//接收json对象(和第三方系统通讯时常见的场景)
@PostMapping("/show-jsonUser")//@RequestBody指定的就是接受一个json对象,需要配合PostMapping来使用
public String showJsonUser(@RequestBody User user){
return user.toString();
}
5.从 URL 地址中获取参数 @PathVariable
6.上传文件 @RequestPart
@RequestMapping("/upfile")
public String upfile(@RequestPart("myfile")MultipartFile file) throws IOException {
String path = "D:\\Desktop\\img.png";
//保存文件
file.transferTo(new File(path));
return path;
}
文件上传我们使用这样的方法的话就存在一个问题:我们传输文件的地址是固定的,当李四传输了文件,张三再传输的时候,李四传输的文件就被覆盖了
7.获取Cookie/Session/Header
7.1 获取 Request 和 Response 对象
@GetMapping("/getparam")
//HttpServletRequest req 是spring boot/spring MVC 内置的,不用去传,当其项目启动的时候就直接注入了,不用传,本身就有
//HttpServletRespond 同样也内置了
public String getParam(HttpServletRequest req){
return req.getParameter("username");
}
7.2 获取Cookie
(1)Servlet 获取 Cookie 的方法
@RequestMapping("/getck")
public String getCookie(HttpServletRequest request){
Cookie[] cookies = request.getCookies();
for (Cookie item:cookies){
log.error(item.getName() + ":" + item.getValue());
}
return "get Cookie!";
}
(2)使用 @CookieValue 注解实现 Cookie 的读取
@RequestMapping("/getck2")
public String getCookie2(@CookieValue("awen") String val){
return "Cookie value" + val;
}
这里我是手动在浏览器中加入Cookie信息的
7.3 获取Header(请求头)中信息
(1)Servlet 获取 Header 的方法
@RequestMapping("/getUa")
public String gerUa(@RequestHeader("user-agent") String userAgent){
return userAgent;
}
(2)使用 @RequestHeader 注解实现 Header 的获取
@RequestMapping("getua2")
public String getHead(@RequestHeader("User-Agent")String userAgent) {
return "header: " + userAgent;
}
7.4 存储和获取 Session
获取session:
和servlet时代存session是一样的,没有注解
存session信息:
(1)Session 存储和 Servlet 类似,是使⽤ HttpServletRequest 中获取的
@RequestMapping("/setsess")
//存session
public String setSession(HttpServletRequest request){
HttpSession session = request.getSession(true);
session.setAttribute("userinfo","userinfo");
return "Set Session Succeed";
}
(2)获取 Session 方法1(Servlet 模式)
@RequestMapping("/getsess")
public String getSession(HttpServletRequest request){
HttpSession session = request.getSession(false);//一定要加false
if (session !=null && session.getAttribute("userinfo") != null){
return (String) session.getAttribute("userinfo");
}else {
return "暂无 Session 信息";
}
}
(3)获取 Seesion 方法2:@SessionAttribute
@RequestMapping("getsess2")
//false 表示没有这个session也行
public String getSession2(@SessionAttribute(value = "userinfo",required = false)String userinfo){
return userinfo;
}
我们观测到@SessionAttribute的源码中:
意味着必须要有属性,通常情况下需要添加 required = false ,如果不添加,那么当 session 中不存在此属性的时候程序运行就会报错