当前位置: 首页 > news >正文

Spring MVC 之获取参数(对象、JSON格式数据、URL地址参数、文件、Cookie)

文章目录

  • 1. 获取单个参数
  • 2. 获取多个参数
  • 3. 获取对象
  • 4. 后端参数重命名 @RequestParam
  • 5. 接收 JSON 格式的数据 @RequestBody
  • 6. 从 URL 地址中获取参数 @PathVariable
  • 7. 上传文件 @RequestPart
  • 8. 获取Cookie (@CookieValue)/Session/header
    • 8.1 获取 Request 和 Response 对象
    • 8.2 获取 Cookie
    • 8.3 获取 Header(请求头)里面的信息
    • 8.4 存储和获取 Session

服务器端要得到用户的请求参数

@Data
public class UserInfo {private int id;private String username;private String password;private int age;
}

1. 获取单个参数

注意这里的参数类型要用 包装类,否则传一个空的值就会出错, 并且这里的参数一定要和前端传递的参数名保持一致,否则就获取不到参数的值了

@Controller
@ResponseBody   // 作用: 表示的是返回一个非静态页面的数据
@RequestMapping("/user")  // 类上的 RequestMapping 可以省略
public class UserController {@RequestMapping("/getuserbyid")public UserInfo getUserById(Integer id) {   //两种命名方式 getUserById | findUserById// 不查数据库,伪代码,返回用户对象UserInfo userInfo = new UserInfo();userInfo.setId(id);userInfo.setUsername("张三");userInfo.setAge(18);return userInfo;}
}

在这里插入图片描述

2. 获取多个参数

@Controller
@ResponseBody   // 作用: 表示的是返回一个非静态页面的数据
@RequestMapping("/user")  // 类上的 RequestMapping 可以省略
public class UserController {@RequestMapping("/login")public String login(String username, String password) {return "用户名: " + username + " | 密码: " + password;}
}

在这里插入图片描述

3. 获取对象

如果要获取的参数很多的话,也可以按照第二种方法来写,但是从代码的美观和维护角度来看,就不太建议这样来写了
Spring MVC 可以自动实现参数对象的赋值

@Controller
@ResponseBody   // 作用: 表示的是返回一个非静态页面的数据
@RequestMapping("/user")  // 类上的 RequestMapping 可以省略
public class UserController {@RequestMapping("/reg")public String reg(UserInfo userInfo) {return "用户信息:" + userInfo;}
}

在这里插入图片描述

4. 后端参数重命名 @RequestParam

有些特殊情况下,前端传递的参数 key 和我们后端接收的 key 可以不一致,比如前端传递了一个 time 给后端,而后端又是用 createtime 字段来接收的,这样就会出现参数接收不到的情况,如果出现这种情况,我们就可以使用 @RequestParam 来重命名前后端的参数值

@Controller
@ResponseBody   // 作用: 表示的是返回一个非静态页面的数据
@RequestMapping("/user")  // 类上的 RequestMapping 可以省略
public class UserController {@RequestMapping("/login")public String login(@RequestParam(value = "name", required = false) String username, String password) {return "用户名: " + username + " | 密码: " + password;}
}

在这里插入图片描述

在这里插入图片描述

5. 接收 JSON 格式的数据 @RequestBody

服务器端实现 JSON 数据的接收需要使用 @RequestBody 注解

@Controller
@ResponseBody   // 作用: 表示的是返回一个非静态页面的数据
@RequestMapping("/user")  // 类上的 RequestMapping 可以省略
public class UserController {@RequestMapping("/reg")public String reg(@RequestBody UserInfo userInfo) {return "用户信息:" + userInfo;}
}

在这里插入图片描述

6. 从 URL 地址中获取参数 @PathVariable

@Controller
@ResponseBody   // 作用: 表示的是返回一个非静态页面的数据
@RequestMapping("/user")  // 类上的 RequestMapping 可以省略
public class UserController {@RequestMapping("/hero/{id}/{name}")public String getHeroInfo(@PathVariable String id, @PathVariable String name) {return "ID:" + id + " | Name: " + name;}
}

在这里插入图片描述

7. 上传文件 @RequestPart

@Slf4j
@Controller
@ResponseBody   // 作用: 表示的是返回一个非静态页面的数据
@RequestMapping("/user")  // 类上的 RequestMapping 可以省略
public class UserController {@RequestMapping("/upimg")public boolean upImg(Integer uid, @RequestPart("img") MultipartFile file) {boolean result = false;// 保存图片到本地目录try {file.transferTo(new File("D:/IDEA/img.png"));result = true;} catch (IOException e) {log.error("上传图片失败: " + e.getMessage());}return result;}
}

在这里插入图片描述

文件上传,这样还有一个问题,这里上传文件到的目录是写为固定了的,那么比如说张三上传图片到这个位置,李四上传另一个图片也是到这个位置,李四的图片就会把张三的图片覆盖了,所以说就会有这样的一个问题

针对这个问题可以对上面的代码进行改进,主要就是这三个方面
在这里插入图片描述

(1)解决目录问题:不同平台的配置文件设置
  比如说在开发环境,需要将上传的文件保存到这个目录,但在生产环境中又需要将文件保存到 Linux 中的某个目录上,如果在开发时写了很多个需要上传文件的目录,那么到项目上线时,需要修改到 Linux 目录,是极为麻烦的,所以这就需要进行不同平台的配置文件设置
在这里插入图片描述
application-dev.yml

# 开发环境的配置文件# 图片保存的路径
img:path: D:/IDEA/

application-prod.yml

# 生产环境的配置# 图片保存的路径
img:path: /root/img/

application.yml

# 设置配置文件的运行平台
spring:profiles:active: dev

UserController.java

@Slf4j
@Controller
@ResponseBody   // 作用: 表示的是返回一个非静态页面的数据
@RequestMapping("/user")  // 类上的 RequestMapping 可以省略
public class UserController {// 从配置文件中读取图片的保存路径@Value("${img.path}")private String imgPath;@RequestMapping("/sayhi")public String sayHi() {return "66666" + imgPath;}
}

如果 application.yml 中设置的配置文件运行平台是开发环境,也就是 application-dev.yml,运行程序可以看到
在这里插入图片描述
反之如果在 application.yml 中设置为生产环境,运行程序
在这里插入图片描述


(2)生成图片名称:UUID
在这里插入图片描述

(3)获取原图片的上传格式:获取原文件名称,并根据原文件名称的后缀,来截取 “.” 后面的字符

@Slf4j
@Controller
@ResponseBody   // 作用: 表示的是返回一个非静态页面的数据
@RequestMapping("/user")  // 类上的 RequestMapping 可以省略
public class UserController {// 从配置文件中读取图片的保存路径@Value("${img.path}")private String imgPath;@RequestMapping("/upimg")public boolean upImg(Integer uid, @RequestPart("img") MultipartFile file) {boolean result = false;// 1.目录=imgPath// 2.图片名称(图片名称不能重复,如果重复就会把重名的图片覆盖)【UUID】// 3.获取原上传图片的格式(获取原文件名称,并根据原文件名称的后缀,来截取 “.” 后面的字符)String fileName = file.getOriginalFilename(); // 得到原图片的名称(xxx.png)fileName = fileName.substring(fileName.lastIndexOf(".")); // 得到图片后缀 (png)fileName = UUID.randomUUID().toString() + fileName; //UUID + 后缀格式// 保存图片到本地目录try {
//            file.transferTo(new File("D:/IDEA/img.png"));file.transferTo(new File(imgPath+fileName));result = true;} catch (IOException e) {log.error("上传图片失败: " + e.getMessage());}return result;}
}

可以看到这里使用 Postman,多点几次 Send,每次上传图片的名字是不同的
在这里插入图片描述

8. 获取Cookie (@CookieValue)/Session/header

8.1 获取 Request 和 Response 对象

因为 Spring MVC是基于 Servlet 的,所以这里可以直接写

@Slf4j
@Controller
@ResponseBody   // 作用: 表示的是返回一个非静态页面的数据
@RequestMapping("/user")  // 类上的 RequestMapping 可以省略
public class UserController {@RequestMapping("/sayhi")public String sayHi(HttpServletRequest request) {return "66666" + request.getParameter(("name"));}
}

在这里插入图片描述

8.2 获取 Cookie

(1)Servlet 获取 Cookie 的方法

@Slf4j
@Controller
@ResponseBody   // 作用: 表示的是返回一个非静态页面的数据
@RequestMapping("/user")  // 类上的 RequestMapping 可以省略
public class UserController {@RequestMapping("/cookie")public void getCookie(HttpServletRequest request) {// 得到全部 CookieCookie[] cookies = request.getCookies();for (Cookie item : cookies) {log.info("Cookie Name:" + item.getName() + " | Cookie Value: " + item.getValue());}}

(2)使用 @CookieValue 注解实现 Cookie 的读取

    @RequestMapping("/cookie2")public String getCookie2(@CookieValue("666")String cookie) {return "Cookie Value: " + cookie;}

8.3 获取 Header(请求头)里面的信息

(1)Servlet 获取 Header 的方法

    @RequestMapping("getua")public String getHead(HttpServletRequest request) {return "header: " + request.getHeader("User-Agent");}

在这里插入图片描述
(2)使用 @RequestHeader 注解实现 Header 的获取

    @RequestMapping("getua2")public String getHead(@RequestHeader("User-Agent")String userAgent) {return "header: " + userAgent;}

在这里插入图片描述

8.4 存储和获取 Session

(1)Session 存储和 Servlet 类似,是使⽤ HttpServletRequest 中获取的

    @RequestMapping("/setsess")public boolean setSession(HttpServletRequest request) {boolean result = false;// 1.得到 HttpSession// true =》 如果没有会话,那就创建HttpSession session = request.getSession(true);// 2.使用 setAtt 设置值session.setAttribute("userinfo","userinfo");result = true;return result;}

在这里插入图片描述

(2)获取 Session 方法1(Servlet 模式)

    @RequestMapping("/getsess")public String getSession(HttpServletRequest request) {String result = null;// 1. 先得到HttpSession 对象HttpSession session = request.getSession(false);// 2. getAttribute 得到 Session 信息if(session != null && session.getAttribute("userinfo") != null) {result = (String) session.getAttribute("userinfo");}return result;}

在这里插入图片描述

(3)获取 Seesion 方法2:@SessionAttribute
通常情况下需要添加 required = false ,如果不添加,那么当 session 中不存在此属性的时候程序运行就会报错

    @RequestMapping("/getsess2")public String getSession2(@SessionAttribute(value = "userinfo",required = false)String userinfo) {return "会话:" + userinfo;}

相关文章:

Spring MVC 之获取参数(对象、JSON格式数据、URL地址参数、文件、Cookie)

文章目录1. 获取单个参数2. 获取多个参数3. 获取对象4. 后端参数重命名 RequestParam5. 接收 JSON 格式的数据 RequestBody6. 从 URL 地址中获取参数 PathVariable7. 上传文件 RequestPart8. 获取Cookie (CookieValue)/Session/header8.1 获取 Request 和 Response 对象8.2 获取…...

永磁同步电机中BEMF电阻的作用

一、电路原理图 二、原理分析 如图一我们测的是相电压,从理论上我们知道我们测得相电压是一个马鞍波形,马鞍波形中并没有隐含 转子的位置和速度信息。那么为什么我们还要有这样一个电路呢? 这个问题其实困惑了我好久?直到有一天…...

JAVA练习45-二叉树的层序遍历

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 提示:这里可以添加本文要记录的大概内容: 提示:以下是本篇文章正文内容,下面案例可供参考 一、题目二叉树的层序遍历 …...

超高精度PID调节器的特殊功能(3)——变送输出(转发)功能及其应用

摘要:变送输出是高级PID控制器的一项重要扩展功能,可用于多区控制、串级控制、比值控制和差值控制以及数据采集及记录。为展示变送输出功能的强大作用,本文主要针对超高精度VPC 2021系列PID控制器,介绍了变送输出的具体功能、参数…...

【C++】nullptr C++中的空指针(C++11)

前言 在平时我们写C/C代码时你可能会看到有人使用NULL表示空指针,也有人用nullptr表示空指针,那么你可能会很好奇它们都是空指针吗?为什么空指针有两种写法?下面就带你了解这背后的原理。 我们都知道NULL是C语言中的空指针&#x…...

笔试题-2023-大疆-数字IC设计【纯净题目版】

回到首页:2023 数字IC设计秋招复盘——数十家公司笔试题、面试实录 推荐内容:数字IC设计学习比较实用的资料推荐 题目背景 笔试时间:2022.08.07应聘岗位:数字IC设计笔试平台:赛码题目评价 难易程度:★★★★★知识覆盖:★★★☆☆超纲范围:★★★☆☆值得一刷:★★★…...

Python dict字典方法完全攻略(全)

我们知道,Python 字典的数据类型为 dict,我们可使用 dir(dict) 来查看该类型包含哪些方法,例如: >>> dir(dict) [clear, copy, fromkeys, get, items, keys, pop, popitem, setdefault, update, values] keys()、value…...

用“AI“挑选一件智慧礼物

在久违的烟火气回归之际,充满希望的生活可能就从精心挑选一件新年礼物开始。在罗列礼品清单时,你会想到 “数据”也是其中之一吗?事实上,几乎所有时下最受欢迎的带有“智能”一词的设备,都是由大量高质量的数据创建。我…...

【Spark分布式内存计算框架——Spark Core】4. RDD函数(下) 重分区函数、聚合函数

重分区函数 如何对RDD中分区数目进行调整(增加分区或减少分区),在RDD函数中主要有如下三个函数。 1)、增加分区函数 函数名称:repartition,此函数使用的谨慎,会产生Shuffle。 2)、…...

智能工厂自动化设备如何将数据采集到物联网云平台上

制造业工厂在进行生产管理、数字化转型升级的过程中,大量自动化设备的数据采集上云一直是困扰厂商的难题之一。因设备种类多、工艺复杂、设备老旧无多余通信接口导致数据无法集中、工艺无法实时管控,加上设备服务商的本地支持比较有限,因此设…...

SpringBoot整合Mybatis的核心原理

0. 前言:1. 自动配置类MybatisAutoConfiguration:1.1. SqlSessionFactory的生成:1.2. Mapper的扫描和代理生成:1.2.1. MapperScannerConfigurer1.2.2. MapperFactoryBean1.2.3. getMapper生成代理对象2. 小结:0. 前言&…...

滴滴一面:order by 调优10倍,思路是啥?

背景说明: Mysql调优,是大家日常常见的调优工作。 所以,Mysql调优是一个非常、非常核心的面试知识点。 在40岁老架构师 尼恩的读者交流群(50)中,其相关面试题是一个非常、非常高频的交流话题。 近段时间,有小伙伴面…...

Vue框架学习篇(五)

Vue框架学习篇(五) 1 组件 1.1 组件的基本使用 1.1.1 基本流程 a 引入外部vue组件必须要的js文件 <script src"../js/httpVueLoader.js"></script>b 创建.vue文件 <template><!--公共模板内容--></template><script><!…...

(蓝桥杯 刷题全集)【备战(蓝桥杯)算法竞赛-第1天(基础算法-上 专题)】( 从头开始重新做题,记录备战竞赛路上的每一道题 )距离蓝桥杯还有75天

&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6; 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&a…...

C++——继承那些事儿你真的知道吗?

目录1.继承的概念及定义1.1继承的概念1.2 继承定义1.2.1定义格式1.2.2继承关系和访问限定符1.2.3继承基类成员访问方式的变化2.父类和子类对象赋值转换3.继承中的作用域4.派生类的默认成员函数5.继承与友元6. 继承与静态成员7.复杂的菱形继承及菱形虚拟继承如何解决数据冗余和二…...

leetcode 困难 —— N 皇后(简单递归)

&#xff08;不知道为啥总是给这种简单的递归设为困难题&#xff0c;虽然优化部分很不错&#xff0c;但是题目太好过了&#xff09; 题目&#xff1a; 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个…...

AWS实战:Dynamodb到Redshift数据同步

AWS Dynamodb简介 Amazon DynamoDB 是一种完全托管式、无服务器的 NoSQL 键值数据库&#xff0c;旨在运行任何规模的高性能应用程序。DynamoDB能在任何规模下实现不到10毫秒级的一致响应&#xff0c;并且它的存储空间无限&#xff0c;可在任何规模提供可靠的性能。DynamoDB 提…...

机器学习评估指标的十个常见面试问题

评估指标是用于评估机器学习模型性能的定量指标。它们提供了一种系统和客观的方法来比较不同的模型并衡量它们在解决特定问题方面的成功程度。通过比较不同模型的结果并评估其性能可以对使用哪些模型、如何改进现有模型以及如何优化给定任务的性能做出正确的决定&#xff0c;所…...

常见的安全问题汇总 学习记录

声明 本文是学习2017中国网站安全形势分析报告. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 2017年重大网站安全漏洞 CVE-2017-3248 &#xff1a;WebLogic 远程代码执行 2017年1月27日&#xff0c;WebLogic官方发布了一个编号为CVE-2017-3248 的…...

元宵晚会节目预告没有岳云鹏,是不敢透露还是另有隐情

在刚刚结束的元宵节晚会上&#xff0c;德云社的岳云鹏&#xff0c;再一次参加并引起轰动&#xff0c;并获得了观众朋友们的一致好评。 不过有细心的网友发现&#xff0c;早前央视元宵晚会节目预告&#xff0c;并没有看到小岳岳&#xff0c;难道是不敢提前透露&#xff0c;怕公布…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...