【SpringMVC】深入解析使用 Postman 和浏览器模拟将单个与多个参数传递到后端的原理和后端接收参数的过程

devtools/2025/3/15 23:41:11/

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


SpringMVC—请求(Request)


访问不同的路径,就是发送不同的请求;在发送请求时,可能会带一些参数,所以学习Spring的请求,主要是学习如何传递参数到后端以及后端如何接收

我们主要是使用 浏览器Postman 来模拟传递参数 的过程


后端开发人员无需过度关注如何传递参数,了解即可,实际开发中以 Postman 测试为主:

比如餐厅的厨师,不关注用户是在店里下单,还是外卖平台下单,或者小程序下单,只需要知道如何接收订单,根据订单做出对应的菜肴就可以了.


1.传递单个参数


(1) 处理常见两个报错


第一个报错

我们来看下列报错

在这里插入图片描述

这是因为启动类的名字不能随便修改,而煮啵刚刚看.example 不顺眼,就删掉了;


在这里插入图片描述

把启动类的名字改回去,这个和的pom.xml里面写的是一样的。一般是在创建项目的时候就规定好了的;


所以,我们应该在刚开始创建项目的时候,提前指定好启动类的名字,编译器会自动配置对应的 porn 文件

在这里插入图片描述


在这里插入图片描述


第二个报错

在这里插入图片描述

遇到上述问题,修改下列这些地方即可:

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


(2) 正常传递参数


接收单个参数,在 Spring MVC 中直接用方法中的参数就可以,比如以下代码:

在这里插入图片描述

重新运行程序后,我们使用 Postman 进行传参:

在这里插入图片描述


填好对应的 URL 后,对刚刚代码中的参数进行传参:

在这里插入图片描述


修改请求方式为 GET ,并且发送:

在这里插入图片描述


咱们使用浏览器发送请求并传参:

http://127.0.0.1:8080/request/r1?keyword=手机

在这里插入图片描述

可以看到,后端程序正确拿到了 keyword 参数的值;

Spring MVC 会根据方法的参数名,找到对应的参数,赋值给方法

在这里插入图片描述

如果参数不一致,是获取不到参数的.

比如请求URL:http://127.0.0.1:8080/request/r1?keyword666=手机


响应结果:

在这里插入图片描述


(3) 传递简单类型或包装类型参数的注意事项


使用基本类型来接收参数时,参数必须传 (除boolean类型),否则会报500错误

类型不匹配时,会报400错误但是类型不匹配是针对简单类型的;

对于如下 r1 方法的参数类型 String 等包装类型,哪怕传参不是 String 类型,也不会报错:

在这里插入图片描述


(4) 基本类型的参数不传递


在这里插入图片描述


对于如上代码,我们在请求中正常传递参数的 URL 如下:

http://127.0.0.1:8080/request/r2?age=18

浏览器响应情况:

在这里插入图片描述


通过Fiddler观察请求和响应,HTTP响应状态码为200,Content-Typetext/html

在这里插入图片描述


正常链接:http://127.0.0.1:8080/request/r2?age=18

不传参数:http://127.0.0.1:8080/request/r2

浏览器响应情况:

在这里插入图片描述


通过 Fiddler 观察请求和响应,HTTP响应状态码为500

在这里插入图片描述


尝试观察程序的错误日志,并解决

在这里插入图片描述

查看日志堆栈信息的首行,报错信息显示:

  • int类型的参数’age’,虽然为可选的,但由于被声明为基本类型而不能转换为空值
  • 考虑将其声明为对应基本类型的包装类型

按照错误信息解决错误即可:

  • 最开始学习时,会遇到各种各样的问题,我们要养成看错误日志的习惯,根据错误日志来解决问题.

  • 最开始可能会看不懂,或者比较懵,要耐下心来,慢慢看,后面课堂中也会教大家更多看日志的思路;


(5) 基本类型的参数传递时类型不匹配


http://127.0.0.1:8080/request/r2?age=abcd

浏览器响应情况:

在这里插入图片描述


通过 Fiddler 观察请求和响应,HTTP响应状态码为 400

在这里插入图片描述

对于包装类型,如果不传对应参数,Spring 接收到的数据则为 null;如果我们传递的值,不符合参数的包装类型,也是可以拿到传递的值的

所以企业开发中,对于参数可能为空的数据,建议使用包装类型


2. 传递多个参数


(1) 正常传递多个参数


如何接收多个参数呢?

和接收单个参数一样,直接使用方法的参数接收即可,使用多个形参.

在这里插入图片描述


打开 Postman 发送请求:

在这里插入图片描述


使用浏览器发送请求并传参:

http://127.0.0.1:8080/request/r3?userName=练习时长&password=“365365183”

在这里插入图片描述


可以看到,后端程序正确拿到了 name 和 password 参数的值

在这里插入图片描述


当有多个参数时,前后端进行参数匹配时,是以参数的名称进行匹配的,因此参数的位置是不影响后端获取参数的结果

比如访问:

http://127.0.0.1:8080/request/r3?password=“365365183”&userName=练习时长


同样可以拿到正端获取参数的结果:

在这里插入图片描述


(2) 完善登录细节


上述使用的是 GET 请求,但是对于登录操作,一般把用户信息放在 body 中,所以一般使用 POST请求 (GET 也可以有 body):

在这里插入图片描述


说明:

  • 在 Postman 中,选择 POST 方式,并且选择表单提交content-type,如上图
  • 登录操作一般都是选择使用 POST,这样参数就会在 body 中上传

在这里插入图片描述


(3) 使用 Postman 发送请求的细节规范


在响应的内容中,我们看见, userName 和 password 都输出了两份,因为我们在 Postman 中发送请求的方式不规范:

在这里插入图片描述


在选择栏中出现一个以上的绿点,说明请求发送的次数大于一次;

在上面的这个请求中,就是在 URL 中输入了一次数据,在 body 中又输入了一次数据,响应就会输出两份数据;

因此,我们要确保只有一个绿点;


我们关掉其中一个绿点,再次发送请求,可以发现响应结果恢复正常:

在这里插入图片描述


或者我们删除 URL 中的 Params 中的键值对:

在这里插入图片描述


删除后,发现 Params 绿点消失,并且信息不再出现在 URL 中,再次发送请求,响应结果也恢复正常:

在这里插入图片描述


(4) 使用 GET 和 POST 的细节


GET

刚刚我们谈到,GET 一般没有 body ,因此参数一般放在 URL 中,但是 GET 也可以有 body:

在这里插入图片描述


抓包结果:

在这里插入图片描述

虽然响应的结果可以看出,在这次 GET 响应中没有拿到参数,但是 GET 请求中已经拿到了参数;

只是 GET 请求的参数一般在首行 URL 部分,而不再下面的 body ,所以为了规范,一般 GET 没有 body


POST

如果我们使用 POST ,参数也可以设置在 URL ,而不设置在 body

在这里插入图片描述


查看抓包结果:

在这里插入图片描述


因此,如果我们不按照规定使用,如把参数放在 GET 请求的 body 位置,可能在响应中就拿不到参数的值,因此,我们要按照规定使用 GETPOST


在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/devtools/167394.html

相关文章

Python :数据模型

一. 什么是数据模型? Python数据模型是Python对象系统的抽象,通过一组特殊方法​(如__init__、__len__等)和协议​(如迭代协议、上下文管理协议),定义了对象如何与语言的内置功能(如…

DAY33 贪心算法Ⅱ

122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 想到把整体利润分解为每天的利润&#xff0c;就豁然开朗了。 class Solution { public:int maxProfit(vector<int>& prices) {int result0;for(int i1;i<prices.size();i){resultmax(0,pric…

运行时动态安全—下一代应用防护技术 : 云鲨RASP

代码疫苗内核驱动的新一代应用威胁自免疫平台 Xshark RASP Adaptive Application Protection Platform 云鲨RASP自适应威胁免疫平台通过专利级AI检测引擎、应用漏洞攻击免疫算法、运行时安全切面调度算法及纵深流量学习算法等关键技术&#xff0c;将主动防御能力“注入”到业…

参考thinkphp架构的FastAPI实现思路

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;基于 Python 3.7 并使用了类型提示。虽然 FastAPI 和 ThinkPHP 的设计理念和语言不同&#xff0c;但 FastAPI 同样可以实现 ThinkPHP 的核心功能&#xff0c;如路由、模…

做到哪一步才算精通SQL

做到哪一步才算精通SQL-Structured Query Language 数据定义语言 DDL for StructCREATE&#xff1a;用来创建数据库、表、索引等对象ALTER&#xff1a;用来修改已存在的数据库对象DROP&#xff1a;用来删除整个数据库或者数据库中的表TRUNCATE&#xff1a;用来删除表中所有的行…

从零开始学习机器人---如何高效学习机械原理

如何高效学习机械原理 1. 理解课程的核心概念2. 结合图形和模型学习3. 掌握公式和计算方法4. 理论与实践相结合5. 总结和复习6. 保持好奇心和探索精神 总结 机械原理是一门理论性和实践性都很强的课程&#xff0c;涉及到机械系统的运动、动力传递、机构设计等内容。快速学习机械…

51. HarmonyOS NEXT 登录模块开发教程(五):安全性考虑与最佳实践

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT 登录模块开发教程&#xff08;五&#xff09;&#xff1a;安全性考虑与最佳实践 文章目录 HarmonyOS NEXT 登录模块开发教程&#…

.gitignore 文件用于 Git 应忽略的文件夹的格式

.gitignore 文件用于指定 Git 应忽略的文件或文件夹的匹配规则。以下是其语法规则和示例说明&#xff1a; 基本格式规则 每行一个规则&#xff1a;每个忽略规则单独占一行。 空行和注释&#xff1a; 空行会被忽略。 以 # 开头的行是注释&#xff08;除非用 \# 转义&#xff0…