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

news2024/10/7 12:29:12

文章目录

  • 一、使用 @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 测试得:

在这里插入图片描述

此时我们可以看到,已经成功获取到了这个 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/425598.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.3.5双链表

单链表vs双链表 就是既有前驱指针也有后继指针,由line改为double。 双链表的插入怎么实现? s->nextp->next; p->next->priors s->priorp //把p赋给s的前驱指针指向的位置 p->nexts; 如果p刚好是最后一个元素。 p->next->prio…

基于ArcGIS的电子地图矢量化方法

一、电子地图及纸质地图矢量化的目的 地图数据来源有很多,其中栅格数据数字化是地图数据的重要来源。栅格数据的矢量化包括地理配准以及矢量化。矢量化后的地图数据往往可以为我们的空间统计分析提供实验依据,从而探究地理分布的时空差异性。 空间参考&a…

完整指南:如何安装Man手册

Man手册简介 man手册是Unix和类Unix操作系统中的命令行工具,用于提供关于特定命令、函数和文件的帮助文档。它通常包含命令的语法、选项、参数、示例以及其他相关信息。man手册可以通过在终端输入"man"命令,后跟要查看的命令或函数名称来访问…

huggingface transformer模型介绍

总结: 模型提高性能:新的目标函数,mask策略等一系列tricks Transformer 模型系列 自从2017,原始Transformer模型激励了大量新的模型,不止NLP任务,还包括预测蛋白质结构,时间序列预测。 有些模…

灌区流量监测设备-中小灌区节水改造

系统概述 灌区信息化管理系统主要对对灌区的水情、雨情、土壤墒情、气象等信息进行监测,对重点区域进行视频监控,同时对泵站、闸门进行远程控制,实现了信息的测量、统计、分析、控制、调度等功能。为灌区管理部门科学决策提供了依据&#xf…

Python 无监督学习实用指南:6~10

原文:Hands-on unsupervised learning with Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只关…

23年5月高项学习笔记12 —— 干系人管理

过程: 1. 识别干系人:定期识别干系人,分析和记录他们的利益,参与度、相互依赖性、影响力和对项目的潜在的影响 输入:立项管理文件、沟通管理计划、干系人参与计划、需求文件、变更日志、问题日志、协议(协…

今天给大家介绍一篇基于springboot的医院管理系统的设计与实现

临近学期结束,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问题,今天给大家介绍一篇基…

2023/4/10总结

线段树 线段树是一种二叉树,通俗易懂的来说就是对于一个线段,我们会用一个二叉树来表示。线段树是一种工具,她能把对区间(线段)的修改与维护从0(N)的时间复杂度变成0(logN)。 如图: 如上图,我…

MYSQL SQL语句优化技术技巧

MySQL是一种流行的关系型数据库管理系统,它提供了各种各样的SQL语句优化技术,下面是一些常见的优化技巧: 1. 使用索引 索引可以大大提高查询性能。在MySQL中,可以使用CREATE INDEX语句在列上创建索引。当查询包含WHERE子句并且…

Google SEO 搜索中心

在公司发展还没有那么成熟的时候,也许你的测试网站是外网可以公开访问的,也许你网站中的机密图片在测试环境(不小心上到正式环境)却被搜索引擎无情抓取,以及有些内部用户才能使用的网址,你并不想被搜索引擎…

明着呼吁暂停,暗着囤积GPU,马斯克暗度陈仓玩得溜

众所周知,此前马斯克纠集了上千名科技工作者对生成式人工智能的深度训练表示了质疑,呼吁暂停继续对深度人工智能的训练,哪怕先暂停六个月。呼吁的尘埃还没有彻底落地,就传出了马斯克已经悄悄地囤积了上万枚GPU,构建自己…

《花雕学AI》15:BingGPT桌面端——尝鲜体验ChatGPT4.0同源技术新Bing的最新成果

引言: 本文将介绍 BingGPT桌面端的开发背景和目的,以及它与新 Bing 的关系和区别。本文还将说明BingGPT桌面端的主要功能和特点,以及如何下载、安装和使用。最后,本文将评价 BingGPT桌面端对于新 Bing 的人工智能聊天功能的推广和…

dolphinscheduler资源中心

资源中心 资源中心介绍 资源中心提供文件管理,UDF管理,任务组管理。 文件管理可以访问要执行的hive的sql文件 UDF管理可以放置fllink执行的自定义udf函数jar包,hive自定义的UDF函数jar包 以上的*.sql,*.jar文件可以理解为资源&#xff0c…

三本小书的前言

所有的事情既是好事也是坏事,人工智能也不例外;所有的事情既是坏事也是好事,人类智慧也不例外。《追问人工智能:从剑桥到北京》前 言一个地方不在大小,关键看有无灵气,剑桥就是这样一个神奇的地方&#xff…

第三章_Redis的十大数据类型

which 10 官网:https://redis.io/docs/data-types/ 一图说明 提前声明 这里说的数据类型是value的数据类型,key的类型都是字符串 十大数据类型分别是 redis字符串(String) String(字符串)。 string是…

USRP B210同步采集

MIMO Multiple Input Multiple Output的缩写,通过多只天线同时进行收发,增加无线网络基地台的涵盖范围。 MIMO(多输入多输出)是一项关键的无线技术,它可以将一个传输信号分割成多个流,而这些流则分散地传…

Uni-APP iOS环境打自定义调试基座

一、准备工作 主要操作步骤参考官方文档:https://ask.dcloud.net.cn/article/152 有少量区别。 准备好苹果开发者账号(过程略)。 二、创建 App IDs 进入网址:https://developer.apple.com/account/resources/identifiers/lis…

我的PID学习历程---PID位置式和增量式

文章目录起因一、什么是开环系统?二、什么是PID?KP,KI,KD三个参数的作用三、PID算法的离散化1、什么是位置式PID?2、位置式PID实现3、什么是增量式PID?4、增量式PID实现四、采用VOFA调试PIDfirewater协议格…

AI绘图网站 MJ(Midjourney) 基础讲解+注册教程

最近有很多伙计在在问如何使用AI作图,MJ当属第一了,不过同样的也是需要魔法才能使用。 是什么? Midjourney是一款高效、准确且免费的AI绘画生成工具,相较于其他同类工具具备更丰富的特色。 先看个成品图: 注册流程 …