【SpringBoot】-Spring MVC项目如何传递参数?

作者:学Java的冬瓜
博客主页:☀冬瓜的主页🌙
专栏:【Framework】
主要内容:使用SpringBoot的SpringMVC框架传递各种参数,如传对象,传表单,传文件。后端对前端的请求信息的获取,如Cookie,Header。后端对session进行设置和获取。

文章目录

  • 一、传递不同参数类型
    • 1、传递单个参数
    • 2、传递对象
    • 3、传递表单数据
    • 4、传递Json对象 后端用@RequestBody注解
    • 5、参数部分传参@RequestParam和 基础URL传参@RequestVariable
    • 6、上传文件 @RequestPart
  • 二、关于参数的设置
    • 1、后端参数重命名和必传参数 后端用@RequestParam注解
    • 2、非必传参数设置
  • 三、后端关于前端各类参数接收
    • 1、获取Cookie——@CookieValue
    • 2、获取Header参数——@RequestHeader
    • 3、获取Session——@SessionAttribute

一、传递不同参数类型

注意:
1> 参数传递不使用基础数据类型,因为容易出错(包装类型最多是参数为null)
2> 在后端路由的方法中仍然可以使用Servlet阶段学的 HttpServletRequest和HttpServletResponse作为参数(这两个相当于隐藏的参数),但是没必要。
3> 当有多个参数时,前后端进行参数匹配,是以参数的名称进行匹配的,与参数的前后位置无关。
4> Spring MVC可以实现自动的参数映射,因此传关于对象的信息时,在后端就可以转成一个对象使用。

1、传递单个参数

前端发送http请求
在这里插入图片描述

后端接收参数

	//1.传递单个参数@RequestMapping("/m1")public Object method_1(String name){System.out.println("==============================");System.out.println("参数name:" + name);System.out.println("==============================");return "传递单个参数";}

后端处理结果
在这里插入图片描述

2、传递对象

理解:前端发送对象信息,后端将信息获取并封装在对象中。

前端发送http请求
在这里插入图片描述
后端接收信息并将信息转为对象

	@RequestMapping("/m2")public String method_2(Person p){System.out.println("==================================");System.out.println("p对象username:" + p.getUsername());System.out.println("p对象password:" + p.getPassword());System.out.println("==================================");return "传递对象";}

后端处理后打印的信息
在这里插入图片描述

3、传递表单数据

后端有两种处理方式:1>一个一个获取前端传的参数(类似1) 2>把前端传来的参数封装成一个对象(类似2)。

4、传递Json对象 后端用@RequestBody注解

理解:后端使用@RequestBody注解,表示从请求的请求体获取信息,请求体是个Json格式数据,因此后端可以正常获取前端的数据并封装在对象中

前端发送http请求:
在这里插入图片描述
后端使用**@RequestBody注解:**
在这里插入图片描述
后端处理后成功打印信息:
在这里插入图片描述

5、参数部分传参@RequestParam和 基础URL传参@RequestVariable

理解:
参数部分传参指的是:http://localhost:8080/test/m4?username=‘张三’
基础URL传参指的是:http://localhost:8080/test/m4/zhangsan。前者传参的username在后面的参数部分,而后者传参的username在基础path中。
区别:
前者适用于要传参数较多的情况;
后者适用于参数较少,且对搜索有关键词要求的情况(基础URL传参对搜索引擎搜索的权重更大,因为要传的参数在path里)。
注意: @RequestParam和@PathVariable都可以重命名参数,也可以设置参数为非必要参数。

基础URL传参前端:
在这里插入图片描述

后端接收基础URL部分参数:使用@PathVariable注解

	@RequestMapping("/m5/{name}/{pwd}")public String method_5(@PathVariable String name, @PathVariable String pwd){//@PathVariable注解表示,参数为基础URL传参。System.out.println("=================================");System.out.println(name + " " + pwd);System.out.println("=================================");return "基础URL传参";}

后端处理后成功打印信息:
在这里插入图片描述

6、上传文件 @RequestPart

注意点:
【SpringBoot文档】

易错点:文件传输有大小限制。在SpringBoot文档中,注明了默认上传文件最大为1MB,请求最大为10MB,这两个参数可以在我们项目的 application配置文件中修改大小。
在这里插入图片描述
修改如下图:spring.servlet.multipart.max-file-size和spring.servlet.multipart.max-request-size
在这里插入图片描述

上传文件正式操作:
前端上传文件:选择表单,然后填写文件上传的key(后端用这个key接收上传文件),选择上传文件并上传。
在这里插入图片描述
后端处理文件上传: 将文件保存在E盘路径下
在这里插入图片描述

代码如下:

@RestController
public class UpLoadController {//4.上传文件@RequestMapping("/myUpload")public String Upload(@RequestPart("myImg") MultipartFile file) throws IOException {System.out.println("=================================");String originalFileName = file.getOriginalFilename();// 1>获得上传文件后缀名String hzName = originalFileName.substring(originalFileName.lastIndexOf("."));// 2>获得文件保存地址(使用唯一标识,确保同一时刻多个用户上传文件不会覆盖)String filePath = "E:/"+ UUID.randomUUID() + hzName;  //(空指针异常)System.out.println(filePath);File saveFile = new File(filePath);try {file.transferTo(saveFile);//保存文件System.out.println("文件上传成功!");System.out.println("=================================");return "上传文件成功!";} catch (IOException e) {e.printStackTrace();}return "上传文件失败!!!";}
}

二、关于参数的设置

1、后端参数重命名和必传参数 后端用@RequestParam注解

场景描述:
当前端发送和后端接收的参数名称不一致时,可以使用@RequestParam给后端参数重命名。这样就在后端可以使用和前端名称不一致的参数获取到前端的值。具体操作如下:

前端发送http请求:使用name传参
在这里插入图片描述
后端接收请求:
在这里插入图片描述

@RequestParam会自动给一个必传参数(上图name默认是必传参数),也就是说此时前端必须用name传参,而不能再使用与后端相同名称的参数username传参。

2、非必传参数设置

注意:如果有个参数是非必传参数,可以使用@RequestParam(value = "name", required = false)来限制,此时该参数就可传可不传,如下代码:

	@RequestMapping("/m3")public String method_3(@RequestParam(value = "name", required = false) String username, String password){return  "后端参数重命名";}

三、后端关于前端各类参数接收

1、获取Cookie——@CookieValue

获取Cookie的后端代码:使用@CookieValue注解

@RestController
public class TestController {@RequestMapping("/getCookie")public String func_1(@CookieValue("cookieKey") String cookie){return "cookie" + cookie;}
}

在这里插入图片描述

注意后端的CookieKey要和前端的cookie名称相同,可以通过在前端浏览器界面打开开发者工具添加指定的cookie进行验证,如下图。
在这里插入图片描述

后端处理后前端显示内容:
在这里插入图片描述

2、获取Header参数——@RequestHeader

后端获取Header信息:只需修改代码中注解内的信息,即可得到相应的请求头信息。

//2、获取header@RequestMapping("/getHeader")public String func_2(@RequestHeader("User-Agent") String headerMsg){return headerMsg;}

在这里插入图片描述

前端请求和响应信息:
在这里插入图片描述

3、获取Session——@SessionAttribute

要想获取session,得先保存session。如下图:

保存session:
在这里插入图片描述

	@RequestMapping("/setSession")public String func_3(HttpServletRequest request){HttpSession session = (HttpSession) request.getSession(true);if (session != null){session.setAttribute("username", "张三");}return "set session succeed!";}

浏览器请求URL和显示信息:
在这里插入图片描述

获取session:
在这里插入图片描述

	@RequestMapping("/getSession")public String func_4(@SessionAttribute(value = "username", required = false)String uname){return "username:" + uname;}

浏览器请求URL和显示信息:
在这里插入图片描述

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

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

相关文章

shell sshpass 主机交互 在另外一台主机上执行某个命令 批量管理主机 以及一些案例

目录 作用安装 sshpasssshpass 用法在远程主机执行某个命令 案例批量传输密匙批量拷贝文件批量修改密码 作用 就是用一台主机 控制另外一台主机免交互任务管理工具方便批量管理主机使用方法就是在ssh 前边加一个 sshpass 安装 sshpass # 安装 sshpass yum -y install sshpas…

【MySQL】数据库之MHA高可用

目录 一、MHA 1、什么是MHA 2、MHA 的组成 3、MHA的特点 4、MHA的工作原理 二、有哪些数据库集群高可用方案 三、实操:一主两从部署MHA 1、完成主从复制 步骤一:完成所有MySQL的配置文件修改 步骤二:完成所有MySQL的主从授权&#x…

Elasticsearch:Serarch tutorial - 使用 Python 进行搜索 (二)

这个是继上一篇文章 “Elasticsearch:Serarch tutorial - 使用 Python 进行搜索 (一)” 的续篇。在今天的文章中,我们接着来完成如何进行分页及过滤。 分页 - pagination 应用程序处理大量结果通常是不切实际的。 因此&#xff0…

【计算机算法设计与分析】棋盘覆盖问题(C++_分治法)

文章目录 题目描述测试样例算法原理算法实现参考资料 题目描述 在一个 2 k 2 k 2^k \times 2^k 2k2k个方格组成的棋盘中,若恰有一个方格与其他方格不同,则称该方格为一个特殊方格,且称该棋盘为一个特殊棋盘。显然,特殊方格在棋…

ssm基于vue框架和elementui组件的手机官网论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本手机官网就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&#x…

uniCloud 云函数

相对于云函数,官方更推荐使用 云对象 新建云函数 编辑云函数 uniCloud-aliyun/cloudfunctions/hello_func/index.js use strict; exports.main async (event, context) > {let {name} eventreturn 你好,${name}! };云函数接收的参数从event中解构获…

接了一条路由器视频广告

关注卢松松,会经常给你分享一些我的经验和观点。 2023年7月,松松团队荣幸的承接了“某口袋路由器”的短视频广告。 我们向客户索取了了几个卖点: 1.家用美观不用走线(无线小巧美观) 外出便携(出差、户外直播、露营等,只要充满电…

http 503 错误

503错误是一种HTTP状态码,表示你请求的网站或服务暂时不可用,通常是因为服务器过载或维护,你可能会看到类似这样的提示:503 Service Unavailable、503 Service Temporarily Unavailable、HTTP Server Error 503、HTTP Error 503 I…

小红书话题浏览近4亿,全网热议“尔滨”!关键词数据拆解爆点玩法

据说,“南方小土豆”勇闯哈尔滨后,北方变了?!冻梨切盘摆出花、东北大哥夹子音、就连东北虎都变金渐层了……继淄博后,哈尔滨成为下一个网红城市。哈尔滨为何这样火?通过小红书数据分析,从社交货…

windows 10 安装wsl ubuntu

1.首先管理员模式打卡powershell,执行 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 2.执行 wsl --update wsl --…

点对点SDWAN组网:通过专线连接实现企业分支互联

点对点SDWAN是一种通过软件定义网络技术将企业分支互联的组网解决方案。在点对点SDWAN中,企业分支通过专线连接实现互联,以满足对网络性能和可靠性的要求。 传统的WAN架构通常使用MPLS(多协议标签交换)技术来实现企业分支的互联。…

CEEMDAN +组合预测模型(CNN-Transformer + ARIMA)

往期精彩内容: 时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 风速预测(一)数据集介绍和预处理-CSDN博客 风速预测(二)基于Pytorch的EMD-LSTM模型-CSDN博客 风速预测&#xff…