利用注解获取 Cookie
利用注解获取 Cookie—通过@CookieValue
获取(获取指定 Cookie)
@RestController @RequestMapping("/test") @Slf4j public class TestController { @RequestMapping("/getCookie") public String getCookie(@CookieValue("Homo") String val) { log.error("Homo | " + val); return "getCookie~~"; } }
运行查看结果
传统方式获取 header
传统方式获取 header—通过 Servlet 获取
@RestController @RequestMapping("/test") public class TestController { @RequestMapping("/getUser-Agent") public String getHeader(HttpServletRequest req) { String userAgent = req.getHeader("User-Agent"); return "tradition | UserAgent : " + userAgent; } }
运行查看结果
利用注解获取 header
利用注解获取 header—通过@RequestHeader
获取
@RestController @RequestMapping("/test") public class TestController { @RequestMapping("/getUser-Agent") public String getUA(@RequestHeader("User-Agent") String userAgent) { return "Annotation | UserAgent : " + userAgent; } }
运行查看结果
Session 的存储与获取
存储 Session
利用 Servlet 存储 Session
对于getSession()
, getSession(true)
, getSession(false)
的解释
getSession(true)
, 如果当前含有 HttpSession, 使用当前 HttpSession, 如果没有, 新创建 SessiongetSession(false)
, 如果当前含有 HttpSession, 使用当前 HttpSession, 如果没有, 返回 NullgetSession()
, 等同于getSession(true)
@RestController @RequestMapping("/test") public class TestController { // 通过 Servlet 存储 Session @RequestMapping("/setSession") public String setSession(HttpServletRequest req) { // 如果当前含有 HttpSession, 使用当前 HttpSession, 如果没有, 新创建 Session HttpSession session = req.getSession(true); // 设置 key, value session.setAttribute("userInfo", "userInfo"); return "Set Session Success"; } }
获取 Session
获取 Session 有 2 种方式
- 通过 Servlet 获取
- 通过
@SessionAttribute
获取
通过 Servlet 获取
@RestController @RequestMapping("/test") public class TestController { // 通过 Servlet 获取 Session @RequestMapping("/getSession") public String getSession(HttpServletRequest req) { HttpSession session = req.getSession(false); if(session != null && session.getAttribute("userInfo") != null) { return (String) session.getAttribute("userInfo"); } else { return "session 信息不存在"; } } }
通过 @SessionAttribute 获取
@RestController @RequestMapping("/test") public class TestController { // 通过 @SessionAttribute 获取 Session @RequestMapping("/getSession") public String getSession( @SessionAttribute(value = "userInfo", required = false) String userInfo) { return userInfo; } }
🔎Spring MVC—返回数据
@ResponseBody
- 未添加
@ResponseBody
, 返回页面 - 添加
@ResponseBody
, 返回数据
返回页面🍭
(未添加@ResponseBody
)
@RequestMapping("/resp") @Controller public class RespController { @RequestMapping("/page") public String retPage() { return "/hello.html"; } }
返回数据🍭
(添加@ResponseBody
)
@RequestMapping("/resp") @Controller @ResponseBody public class RespController { @RequestMapping("/page") public String retPage() { return "/hello.html"; } }
返回 JSON 对象
返回 对象(Object) / HashMap 都是 JSON 格式
JSON 格式是键值对结构, 对象(Object) / HashMap 也是键值对结构
以 HashMap 为例🌰
@RestController @RequestMapping("/test") public class TestController { @RequestMapping("/response") public HashMap<String, String> respJson() { HashMap<String, String> map = new HashMap<>(); map.put("Tom", "Tom_Val"); map.put("Homo", "Homo_Val"); map.put("Jack", "Jack_Val"); return map; } }
抓包查看结果
请求转发与请求重定向
- 请求转发 → forward
- 请求重定向 → redirect
请求转发
// 请求转发 @RequestMapping("/bibubibu-forward") public String reqForward() { return "forward:/hello.html"; }
请求重定向
// 请求重定向 @RequestMapping("/bibubibu-redirect") public String reqRedirect() { return "redirect:/hello.html"; }
理解 forward(请求转发) 与 redirect(请求重定向)
举个栗子🌰
滑稽老哥对他女朋友说想吃羊肉串
女朋友帮他买羊肉串(请求转发)
滑稽老哥自己去买羊肉串(请求重定向)
具体区别🍭
- 请求转发 → 由服务器端负责转发, 请求重定向 → 将请求重定位到资源
- 请求转发 → 地址不会发生改变, 请求重定向 → 地址会发生改变
- 请求转发 → 服务器端负责转发, 地址不发生改变(可能造成原外部资源不能访问)
请求重定向 → 地址发生改变, 等同于直接访问新地址(原外部资源能够访问)
类似于滑稽老哥自己去买羊肉串他就能买到口感最好的羊肉串(自己平时光顾较多的烧烤店) → 原外部资源能够访问
而委托女朋友去买虽然告诉了具体的地址仍然有可能买错 → 原外部资源不能访问
🔎总结
- Spring MVC—连接🍂
@RestController
→@Controller
+@ResponseBody
@RequestMapping
默认支持多种 HTTP 请求(GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS…)@RequestMapping
指定请求类型 →@RequestMapping(value = "", method = RequestMethod.指定请求的类型)
@RequestMapping
指定请求类型 == 指定请求类型Mapping
(例如@RequestMapping(value = "", method = RequestMethod.GET)
==@GETMapping(value = "")
)
- Spring MVC—获取参数🍂
- 获取参数时 URL 中的 key 必须与所传参数一致
- 建议传参的类型为包装类型, 而非基础类型
- 参数重命名 →
@RequestParam
- 传递对象 → 当所需获取的参数较多时, 可通过传递对象的方式进行传参(URL 中的 key 必须与所传对象的属性一致)
- 传递 JSON 对象 →
@RequestBody
- 获取 URL 中的参数 →
@PathVariable
- 上传文件 →
@RequestPart
- 获取 Cookie
- 传统方式获取 Cookie—通过 Servlet 获取(获取全部 Cookie)
- 利用注解获取 Cookie—通过
@CookieValue
获取(获取指定 Cookie)
- 获取 header
- 传统方式获取 header—通过 Servlet 获取
- 利用注解获取 Cookie—通过
@RequestHeader
获取
- Session 的存储与获取
- 存储 Session—通过 Servlet 存储 Session
- 获取 Session—通过 Servlet 获取 Session
- 获取 Session—通过
@SessionAttribute
获取
- Spring MVC—返回数据
@ResponseBody
→ 未添加@ResponseBody
, 返回页面 / 添加@ResponseBody
, 返回数据- 请求转发(地址不会发生改变) → forward / 请求重定向(地址会发生改变) → redirect
🌸🌸🌸完结撒花🌸🌸🌸