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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


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.mzph.cn/diannao/73009.shtml

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

相关文章

04 | 初始化 fastgo 项目仓库

提示: 所有体系课见专栏:Go 项目开发极速入门实战课;欢迎加入我的训练营:云原生AI实战营,一个助力 Go 开发者在 AI 时代建立技术竞争力的实战营;本节课最终源码位于 fastgo 项目的 feature/s01 分支&#x…

Docker 安装成功后,安装 Dify 中文版本的步骤

Docker 安装成功后,安装 Dify 中文版本的步骤如下1: 克隆 Dify 代码仓库:在终端中执行以下命令,将 Dify 源代码克隆至本地环境。 bash git clone https://github.com/langgenius/dify.git进入 Dify 的 docker 目录: b…

RPC服务调用深度解析:从原理到Java实践

一、RPC的核心原理与架构设计 1.1 RPC的本质 RPC(Remote Procedure Call)是一种分布式系统间通信协议,允许程序像调用本地方法一样调用远程服务。其核心目标是通过位置透明性和协议标准化隐藏网络通信细节。RPC的调用流程可抽象为以下步骤&…

电脑的写字板如何使用?

打开写字板: 直接按一下键盘上的win R 键,然后输入:write , 再按一下回车 , 即可打开写字板 可以在里面写文字 和 插入图片等… , 如下所示: 保存写字板内容: 当我们写好了之后,…

医疗AI测试实战:如何确保人工智能安全赋能医疗行业?

一、医疗AI测试的重要性 人工智能(AI)正广泛应用于医疗行业,如疾病诊断、医学影像分析、药物研发、手术机器人和智能健康管理等领域。医疗AI技术的应用不仅提高了诊断效率,还能降低误诊率,改善患者治疗效果。然而&…

AI日报 - 2025年3月12日

AI日报 - 2025年3月12日 🌟 今日概览(60秒速览) ▎🤖 AGI突破 | Anthropic CEO预测AI将主导代码编写 🔬 自训练技术显著提升LLM思维清晰度 ▎💼 商业动向 | OpenAI与CoreWeave达成119亿美元基建协议 &…

跳表数据结构

跳表(Skip List)是一种支持高效插入、删除和查找的链表结构,用于加速查找操作,特别适用于有序数据集合。它在Redis、LevelDB等系统中被用于**有序集合(Sorted Set)**的实现。 1. 跳表的结构 跳表的核心思…

系统会把原先的对话状态堆栈从 [“assistant“] 更新为 [“assistant“, “update_flight“]这个更新的处理过程

这个更新主要是在 State 定义中通过 Annotated 来自动处理的。在 State 类型中,我们对 dialog_state 字段绑定了 update_dialog_stack 函数,如下所示: class State(TypedDict):messages: Annotated[list[AnyMessage], add_messages]user_inf…

HTTP发送POST请求的两种方式

1、json String json HttpRequest.post(getUrl(method, "v1", url, userId, appKey)).header("Content-type", "application/json") // 设置请求头为 JSON 格式.body(JSONUtil.toJsonStr(params)) // 请求体为 JSON 字符串.execute().body(); …

Windows 万兴恢复专家 Wondershare Recoverit-v13.5.7.9-[电脑数据恢复工具]

Windows 万兴恢复专家Wondershare_Recoverit 链接:https://pan.xunlei.com/s/VOL3z608vzAj_IYTvH-F1q7kA1?pwdiu89# 1. 打开Setup.exe进行安装,安装完不要打开软件,记住安装目录 2. 将"Crack"文件夹内的所有文件复制到安装目录 …

Blender UV纹理贴图,导出FBX到Unity

加载ps好的模型贴图。右下角选择《材质》基础色里面选择《图像纹理》,选择你的图片。 选择上面UV选项卡。左上角选择UV编辑器。选中物体,TAB进入编辑模式。即可调整映射的图像范围。 其中渲染设置可以在左侧下边脱出。 导出带纹理FBX模型 路径选择复…

华为hcia——Datacom实验指南——以太网帧和IPV4数据包格式(一)

实验开始 第一步配置环境 第二步配置客户端 如图所示,我们把客户端的ip配置成192.168.1.10,网关设为192.168.1.1 第三步配置交换机1 system-view sysname LSW1 vlan batch 10 interface ethernet0/0/1 port link-type access port default vlan 10 qu…

解锁 Ryu API:从 Python 接口到 REST 设计全解析

Ryu 4.34 版本的 API 功能分类、核心接口说明及示例代码,结合其 Python 应用开发接口和 REST API 的设计特点进行综合解析: 一、Python 应用开发 API Ryu 的核心能力通过 Python 类库实现,开发者需继承 RyuApp 类并注册事件处理函数。 1. 应…

如何在需求分析阶段考虑未来扩展性

在需求分析阶段考虑未来扩展性的关键在于 前瞻规划、灵活架构、标准设计。其中,前瞻规划尤为重要,因为通过全面分析业务发展趋势与技术演进,能够在初期设计阶段预留足够扩展空间,降低后期改造成本,为企业长期发展奠定坚…

Docker搭建Redis哨兵模式【一主两从三哨兵】

Docker搭建Redis哨兵模式 系统: CentOS 7 Dockder 版本: VMware虚拟机 网络适配器 网络连接 桥接模式:直接连接物理网络查看IP命令 ip addr一、哨兵模式概述 1. 官方文档与关联博客 官方文档:https://redis.io/docs/latest/operate/oss_and_stack/management/sentinel关联博…

关于统计建模大赛的选题

文章目录 0.大赛主题1.量化分析和风险管理2.金融市场预测与统计建模3.投资与机器学习相关4.大数据和医疗5.智能制造相关的6.教育行业 0.大赛主题 统计创新应用数据引领未来:这个主题其实很宽泛,没有什么明确的这个要求,所以只要是和我们的统…

Docker 学习笔记:从入门到部署,实战演练全流程!

📌 开篇:为什么要学 Docker? 还在为环境不一致、部署麻烦、依赖冲突头疼吗?Docker 让一切变得简单!作为现代开发和运维的神器,Docker 让我们可以用 一句命令 解决 “在我电脑上能跑” 的问题。今天&#x…

ThinkPhp 5 安装阿里云内容安全(绿化)

composer require alibabacloud/green-20220302 首先要把php5(不支持php7)的执行文件设置到PATH环境变量 此外还要先执行composer update php5.5和php5.6的区别 5.5认为 <? 开头的也是php文件&#xff0c;包括 <?php 5.6认为 <? 开头的不是php文件&#xff0c;只…

使用NVM工具管理Node版本

Date: 2025.03.10 14:53:55 author: lijianzhan NVM&#xff08;Node Version Manager&#xff09;用于在同一个系统上管理多个 Node.js 版本,NVM 允许你安装、使用和切换不同的 Node.js 版本。这对于前端工作人员来说可以更方便的管理和维护不同nodejs版本的项目。 &#xff0…

Vue主流的状态保存框架对比

一、Vuex 4&#xff08;官方传统方案&#xff09; 优点&#xff1a; 官方背书&#xff1a;Vue 官方长期维护&#xff0c;成熟稳定。结构化清晰&#xff1a;通过 state/mutations/actions/getters 强制约定代码结构&#xff0c;适合大型团队协作。插件生态&#xff1a;支持中间…