【JavaEE】SpringMVC获取HTTP中的元素

目录

  • 一、获取URL中的参数@PathVariable
  • 二、上传⽂件@RequestPart
  • 三、获取Cookie/Session
    • 3.1 HttpServletRequest和 HttpServletResponse
    • 3.2 获取Cookie
      • 3.2.1 使用HttpServletRequest
      • 3.2.2 使用注解@CookieValue
    • 3.3 设置session
    • 3.4 获取session
      • 3.4.1 使用HttpServletRequest
      • 3.4.2 直接使用HttpSession
      • 3.4.3 使用注解@SessionValue
  • 四、获取Header
    • 4.1 使用HttpServletRequest
    • 4.2 使用注解@RequestHeader

一、获取URL中的参数@PathVariable

path variable: 路径变量。
@PathVariable这个注解可以拿到URL中的参数,使用注意:

  1. 写在方法的参数名前,每个变量都要写。
  2. 当URL中的变量与方法中的变量同名时,可以不在@PathVariable写上URL的变量名。
  3. 当要对拿到的URL变量重命名,要在@PathVariable()括号中写上URL的名字。
  4. URL中的参数必传。

后端代码:

Postman传参:

二、上传⽂件@RequestPart

  1. 上传文件使用MuMultipartFile类下的transferTo方法。
  2. 使用@RequestPart注解可以进行重命名。
  3. 记得抛异常

后端代码:

@RequestMapping("/r2")public String getFile(@RequestPart("file11") MultipartFile file) throws IOException {String fileName = file.getOriginalFilename();file.transferTo(new File("E:/"+ file.getOriginalFilename()));return "上传成功"+fileName;}

Postman传参:

  • 在Body里面找form-data传File类型。

三、获取Cookie/Session

3.1 HttpServletRequest和 HttpServletResponse

  1. HttpServletRequest这个类可以拿到HTTP请求中的东西。
  2. HttpServletResponse这个类可以拿到HTTP响应中的东西,还可以进行修改。

3.2 获取Cookie

获取Cookie有以下两种方式。

3.2.1 使用HttpServletRequest

只需要调用该类下的getCookies方法即可。

@RequestMapping("r3")public String r3 (HttpServletRequest request) {Cookie[] cookies = request.getCookies();return "获取成功";}

Postman发请求:

3.2.2 使用注解@CookieValue

在注解中写下Cookie中变量的名,然后后面跟着要赋值的变量类型与名字。
这种方法每次只能获得一个Cookie变量。

@RequestMapping("/r4")public String r4(@CookieValue("name") String name) {return name;}

Postman发请求:

3.3 设置session

使用HttpServletRequest下的getSession方法,拿到sessionId,拿到session。

 HttpSession getSession(boolean create);
  1. 默认为true,如果没有拿到session,返回一个空HttpSession对象。
  2. 如果为false,没有拿到session,返回一个null。

代码:

@RequestMapping("/r5")public String setSession(HttpServletRequest request) {HttpSession session = request.getSession();session.setAttribute("name","lisi");session.setAttribute("age","88");return "设置成功";}

3.4 获取session

获取session有以下三种方式。

3.4.1 使用HttpServletRequest

使用HttpServletRequest类下的getSession方法拿到session,
再通过HttpSession 类下的方法getAttribute获取session中的对象 Object getAttribute(String name);

代码:

@RequestMapping("/r6")public String r5(HttpServletRequest request) {HttpSession session = request.getSession(false);if (null == session) {return "用户未登录";} else {return "用户名:"+(String) session.getAttribute("name") +"用户年龄"+(String) session.getAttribute("age");}}

Postman传参:

3.4.2 直接使用HttpSession

相当于HttpSession session = request.getSession();直接在方法参数完成。

@RequestMapping("/r8")public String r5(HttpSession session ) {if (null == session) {return "用户未登录";} else {return "用户名:"+(String) session.getAttribute("name") +"用户年龄"+(String) session.getAttribute("age");}}

3.4.3 使用注解@SessionValue

注解中value代表:session中的对象, required 调配没拿到session时返回什么,true返回空HttpSession对象,false返回null。
代码:

@RequestMapping("r7")public String r6(@SessionAttribute(value = "name",required = false) String name) {System.out.println(name);return  name;}

Postman传参:

四、获取Header

获取session有以下两种方式。

4.1 使用HttpServletRequest

使用HttpServletRequest类下的getHeader方法,方法中填入想要的header中的参数名称,拿到header下的参数。

代码:

@RequestMapping("/r9")public String getHeader(HttpServletRequest request) {String header = request.getHeader("user-agent");return "获取到 "+header;}

Postman传参:

4.2 使用注解@RequestHeader

在注解中写下Header中参数的名,然后后面跟着要赋值给的变量类型与名字。

代码:

@RequestMapping("/r10")public String getHeader2(@RequestHeader("user-agent") String header) {return "获取到 "+header;}

Postman传参:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React低代码项目:用户登陆

吐司问卷:用户登陆 Date: February 17, 2025 4:12 PM (GMT8) JWT **概念:**登陆成功后,服务端返回一个 token JWT组成: JWT 由三个部分组成:头部(Header)、载荷(Payload&#xf…

集合与反射

一、集合体系 集合一共分为两部分:Collection(单列集合)每个元素(数据)只包含一个值。 Map(双列集合)每个元素包含两个值(键值对)。 二、ArrayList和LinkedList的区别 数…

ubuntu:桌面版磁盘合并扩容

下载gparted磁盘编辑器 apt-get install gparted 打开gparted 更改目标分区大小 当遇到这个报错时,需要在命令行执行原分区的挂载指令 查看该分区信息 记住该目录,并在命令行执行 mount -o remount -rw /# 示例:mount -o remount -rw /v…

全国各省山峰分布SHP数据详解及其在科学研究与旅游规划中的应用

一、引言 在中国这片广袤无垠的土地上,山峰作为自然界的壮丽景观,不仅构成了大地的骨架,更承载着丰富的自然资源和深厚的文化底蕴。 全国各省山峰分布SHP数据,作为一种地理信息系统(GIS)中的矢量数据格式…

向量数据库milvus部署

官方文档 Milvus vector database documentationRun Milvus in Docker (Linux) | Milvus DocumentationMilvus vector database documentation 按部署比较简单,这里说一下遇到的问题 一:Docker Compose 方式部署 1、镜像无法拉取,(docker.io被禁) …

Java 基础面试题

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

清华大学《AIGC发展研究3.0》

大家好,我是吾鳴。 AIGC已经爆火好长一段时间了,特别是DeepSeek的爆火,直接让很多之前没有体会过推理模型的人可以免费的使用上推理模型,同时DeepSeek产品形态也是全球首创,就是直接把AI的思考过程展示给你看&#xff…

苹果CMS泛目录站群架构:无缓存刷新技术的SEO实战

一、技术背景与行业痛点 传统泛目录站群系统普遍依赖静态缓存机制,导致两个核心问题: 缓存臃肿:运行3-6个月后缓存文件可达数百GB量级,严重影响服务器性能内容僵化:缓存机制导致页面TDK(标题/描述/关键词…

iview table组件中修改按钮时 要注意是否真的修改了值

如图所示, switch按钮的默认值用dj来控制,但是如果没有加事情去修改切换后的值的话,那么他只会修改本身的显示值,但是我们需要跟着修改的列表数据的dj值是不会修改的,所以要注意,一定要加上事情去修改确定的…

Go中slice和map引用传递误区

背景 关于slice和map是指传递还是引用传递,很多文章都分析得模棱两可,其实在Go中只有值传递,但是很多情况下是因为分不清slice和map的底层实现,所以导致很多人在这一块产生疑惑,下面通过代码案例分析slice和map到底是…

Linux网络基础(协议 TCP/IP 网络传输基本流程 IP VS Mac Socket编程UDP)

文章目录 一.前言二.协议协议分层分层的好处 OSI七层模型TCP/IP五层(或四层)模型为什么要有TCP/IP协议TCP/IP协议与操作系统的关系(宏观上是如何实现的)什么是协议 三.网络传输基本流程局域网(以太网为例)通信原理MAC地址令牌环网 封装与解包分用 四.IP地址IP VS Mac地址 五.So…

python-leetcode-乘积最大子数组

152. 乘积最大子数组 - 力扣&#xff08;LeetCode&#xff09; class Solution:def maxProduct(self, nums: List[int]) -> int:if not nums:return 0max_prod nums[0]min_prod nums[0]result nums[0]for i in range(1, len(nums)):if nums[i] < 0:max_prod, min_prod…

图像处理之图像边缘检测算法

目录 1 图像边缘检测算法简介 2 Sobel边缘检测 3 经典的Canny边缘检测算法 4 演示Demo 4.1 开发环境 4.2 功能介绍 4.3 下载地址 参考 1 图像边缘检测算法简介 图像边缘检测是计算机视觉和图像处理中的基本问题&#xff0c;主要目的是提取图像中明暗变化明显的边缘细节…

React 源码揭秘 | Effect更新流程

前面的文章介绍了 hooks和commit流程&#xff0c;算是前置知识&#xff0c;这篇来讨论一下useEffect的原理。 useEffect用来处理副作用&#xff0c;比如网络请求&#xff0c;dom操作等等, 其本质也是个hooks&#xff0c;包含hooks的memorizedState, updateQueue, next Effec…

【Linux】vim 设置

【Linux】vim 设置 零、起因 刚学Linux&#xff0c;有时候会重装Linux系统&#xff0c;然后默认的vi不太好用&#xff0c;需要进行一些设置&#xff0c;本文简述如何配置一个好用的vim。 壹、软件安装 sudo apt-get install vim贰、配置路径 对所有用户生效&#xff1a; …

qt-C++笔记之QtCreator新建项目即Create Project所提供模板的逐个尝试

qt-C笔记之QtCreator新建项目即Create Project所提供模板的逐个尝试 code review! 文章目录 qt-C笔记之QtCreator新建项目即Create Project所提供模板的逐个尝试1.Application(Qt):Qt Widgets Application1.1.qmake版本1.2.cmake版本 2.Application(Qt):Qt Console Applicati…

Vue 项目中配置代理的必要性与实现指南

Vue 项目中配置代理的必要性与实现指南 在 Vue 前端项目的开发过程中&#xff0c;前端与后端地址通常不同&#xff0c;可能引发跨域问题。为了在开发环境下顺畅地请求后端接口&#xff0c;常常会通过配置**代理&#xff08;proxy&#xff09;**来解决问题。这篇文章将详细解析…

Linux运维命令-三剑客(grep awk sed)

目录 1.简介 2.命令详解 2.1.grep命令 2.1.1.功能 2.1.2.常见的使用场景及命令 2.2.awk命令 2.2.1.功能 2.2.2.常见的使用场景及命令 2.3.sed命令 2.3.1.功能 2.&#xff13;.2.常见的使用场景及命令 3.总结 1.简介 在Linux中&#xff0c;grep、awk、sed 命令常被称…

浅析 Redis 分片集群 Cluster 原理、手动搭建、动态伸缩集群、故障转移

大家好&#xff0c;我是此林。 之前的文章中分享了 Redis 集群方案的一种&#xff1a;主从集群哨兵机制 浅谈 Redis 主从集群原理&#xff08;一&#xff09;-CSDN博客 浅谈 Redis 主从复制原理&#xff08;二&#xff09;-CSDN博客 这种模式有什么缺点呢&#xff1f; 1. 虽…

Javaweb后端数据库多表关系一对多,外键,一对一

多表关系 一对多 多的表里&#xff0c;要有一表里的主键 外键 多的表上&#xff0c;添加外键 一对一 多对多 案例