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

一、使用 @RequestBody 接收JSON对象

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

代码实现:

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

使用 postman 测试得:

在这里插入图片描述

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

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

在这里插入图片描述

在这里插入图片描述


二、使用 @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 .gif
        fileName = 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.设置保存路径:

我们可以将文件保存路径设置在配置文件中,然后直接读取配置文件就行了,如下:
在这里插入图片描述

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

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

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

在这里插入图片描述

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

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 测试得:

在这里插入图片描述

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

在这里插入图片描述


三、获取 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 对象就创建⼀个 session
        HttpSession httpSession = request.getSession(true);
        httpSession.setAttribute("userinfo", "zhangsan");
        result = true;
        return result;
    }

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

存储 Cookie 前

在这里插入图片描述

存储 Cookie 后

在这里插入图片描述

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

在这里插入图片描述


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值