> 文章列表 > 【 Spring MVC 核心功能(二) - 获取参数(下)】

【 Spring MVC 核心功能(二) - 获取参数(下)】

【 Spring MVC 核心功能(二) - 获取参数(下)】

文章目录

  • 一、使用 @RequestBody 接收JSON对象
  • 二、使用 @RequestPart 上传⽂件
  • 三、获取 Cookie
  • 四、获取 Header
  • 五、存储和获取 Session
    • 5.1 存储 Session
    • 5.2 获取 Session

一、使用 @RequestBody 接收JSON对象

有时客户端会通过 post 方式发送 json 格式的请求,那后端就可以通过 @RequestBody 注解来获取到 json 格式的请求

代码实现:

    // 接受 json格式的请求   @RequestBody@RequestMapping("/rename1")public String rename1(@RequestBody String UserName) {return UserName;}

使用 postman 测试得:

【 Spring MVC 核心功能(二) - 获取参数(下)】

此时我们可以看到,已经成功获取到了这个 json 对象

扩展:如何使用 postman 发送一个 json 格式的请求?

【 Spring MVC 核心功能(二) - 获取参数(下)】

【 Spring MVC 核心功能(二) - 获取参数(下)】


二、使用 @RequestPart 上传⽂件

示例一个基础场景,客户端用户通过id来修改头像

代码示例:

 // 1.设置文件目录,从配置文件中获取@Value("${img.path}")private String imgpath;@RequestMapping("/upimg")// @RequestPart:表示上传的文件名参数  MultipartFile:表示用此接收public boolean upImg(Integer id, @RequestPart("img") MultipartFile file) {// 2.图片名称,不能重复【UUID:全局唯一id 不会重复】String fileName = file.getOriginalFilename();//得到原图片名称fileName = fileName.substring(fileName.lastIndexOf("."));//得到图片后缀,如.png .giffileName = UUID.randomUUID().toString() + fileName;//得到一个唯一的前缀再与后缀拼起来,就是唯一的图片名称try {// 此时是将接收到的文件保存在本地,如果部署到服务器后就是保存到服务器file.transferTo(new File(imgpath + fileName));return true;} catch (IOException e) {log.error("上传图片失败" + e.getMessage());}return false;}

注意: 上述代码有两个重要的点 !!

  1. 设置图片文件保存的路径
  2. 设置图片的名称,确保它是唯一的

1.设置保存路径:

我们可以将文件保存路径设置在配置文件中,然后直接读取配置文件就行了,如下:
【 Spring MVC 核心功能(二) - 获取参数(下)】

再通过 @Value(“${img.path}”) 读取就行 !!

拓展: 不同运行平台的配置文件设置

在实际开发中,我们经常会涉及多个平台共同开发 !!所有每一个平台也会有自己不同的配置文件。例如开发平台会配置自己的开发配置文件,测试平台可以设置自己的测试配置文件,当需要使用时就直接用主配置文件去切换就行,如下:

【 Spring MVC 核心功能(二) - 获取参数(下)】

注意: 不同平台文件配置的命名规则

2.设置图片名称:

  1. 得到图片的后缀,.png/.GIF 等
  2. 使用 UUID 给图片生成一个唯一的前缀名
 // 2.图片名称,不能重复【UUID:全局唯一id 不会重复】
String fileName = file.getOriginalFilename();//得到原图片名称
fileName = fileName.substring(fileName.lastIndexOf("."));//得到图片后缀,如.png .gif
fileName = UUID.randomUUID().toString() + fileName;//得到一个唯一的前缀再与后缀拼起来,就是唯一的图片名称

使用 postman 测试得:

【 Spring MVC 核心功能(二) - 获取参数(下)】

此时我们去 保存的路径下观察:

【 Spring MVC 核心功能(二) - 获取参数(下)】


三、获取 Cookie

  1. servlet 中获取 Cookie 的方法
    @RequestMapping("/getcookie")public void getCookie(HttpServletRequest request) {Cookie[] cookies = request.getCookies();for (Cookie item : cookies) {log.info("Cookie Name:" + item.getName() + "| Cookie Value:" + item.getValue());}}

通过 servlet 方法是获取到所有Cookie !! 想要获取单个还得使用注解

  1. @CookieValue 获取 Cookie
    @RequestMapping("getcookie1")public String getCookie1(@CookieValue("bite") String cookie) {return "Cookie Value: " + cookie;}

当你想使用注解获取多个 Cookie 时,就多添加几个注解 !!


四、获取 Header

  1. servlet 中获取 Header 的方法
    @RequestMapping("/getheader")public String getHeader(HttpServletRequest request) {return request.getHeader("User-Agent");}
  1. 使用 @RequestHeader 获取 Header
    @RequestMapping("/getheader1")public String getHeader1(@RequestHeader("User-Agent") String header) {return "Header:" + header;}

同上,当你想使用 @RequestHeader 获取多个 Header 时,就多添加几个注解


五、存储和获取 Session

5.1 存储 Session

Session 存储和 Servlet 类似,是使⽤ HttpServletRequest 中获取的,如下代码所示:

    @RequestMapping("/setsession")public boolean setSession(HttpServletRequest request) {boolean result = false;//参数设置为 true 表示如果没有 session 对象就创建⼀个 sessionHttpSession httpSession = request.getSession(true);httpSession.setAttribute("userinfo", "zhangsan");result = true;return result;}

我们可以在页面中 F12 进入调试控制台,观察应用程序中 Cookie 的变化,如下:

存储 Cookie 前

【 Spring MVC 核心功能(二) - 获取参数(下)】

存储 Cookie 后

【 Spring MVC 核心功能(二) - 获取参数(下)】

当存储 Session 后,Cookie 中多出来了一组数据 !此时这个 Cookie 就对应了刚才创建的 Session 的 SessionID。Session 会话的本质就是一个 “哈希表”, 存储了一些键值对结构. key 就是SessionID, value 就是用户信息(用户信息可以根据需求灵活设计),可以是一些键值对

【 Spring MVC 核心功能(二) - 获取参数(下)】


5.2 获取 Session

  1. 使用 Servlet 方法 获取
    @RequestMapping("/getsession")public String getSession(HttpServletRequest request) {String result = null;HttpSession httpSession = request.getSession(false);if (httpSession != null && httpSession.getAttribute("userinfo") != null) {result = (String) httpSession.getAttribute("userinfo");}return result;}
  1. 使用注解 @SessionAttribute 获取
    @RequestMapping("/getsession1")         public String getSession1(@SessionAttribute(value = "userinfo", required = false) String session) {return session;}

设置 required = false,当Session中没有该属性就为null,不设置的话就会报错


之前我们讲过,Spring MVC 是基于 Servlet API 构建的原始 Web 框架,所以在 MVC项目中,我们可以直接使用 HttpServletRequest 以及 HttpServletResponse 等Servlet API