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

【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


在这里插入图片描述

在这里插入图片描述

相关文章:

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

SpringMVC—请求(Request) 访问不同的路径,就是发送不同的请求;在发送请求时,可能会带一些参数,所以学习Spring的请求,主要是学习如何传递参数到后端以及后端如何接收; 我们主要是使用 浏览器 和 Postman …...

VSTO(C#)Excel开发10:启动和卸载顺序 事件处理 监视变化

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...

vue 仿deepseek前端开发一个对话界面

后端:调用deepseek的api,所以返回数据格式和deepseek相同 {"model": "DeepSeek-R1-Distill-Qwen-1.5B", "choices": [{"index": 0, "delta": {"role": "assistant", "cont…...

UE5以插件的形式加载第三方库

之前在UE中加载第三方库的形式是以静态或者动态链接的形式加载但是不太容易复用。就想着能不能以插件的形式加载第三方库,这样直接把插件打包发行就可以复用了,之前也找过相应的教程但是很难找到比较简单易懂的教程,要么是比较复杂&#xff0…...

Vue3全局化配置(ConfigProvider)

效果如下图: 在线预览 APIs ConfigProvider 参数说明类型默认值theme主题对象Theme{}abstractboolean是否不存在 DOM 包裹元素truetagstringConfigProvider 被渲染成的元素,abstract 为 true 时有效‘div’ Theme Type 名称说明类型默认值common?全…...

Centos7系统基于docker下载ollama部署Deepseek-r1(GPU版不踩坑)

目录 一、Docker下载安装 二、Ollama安装 三、部署Deepseek-R1 一、Docker下载安装 1、更新源 sudo yum update -y 2、下载依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 3、添加docker远程仓库地址 yum-config-manager --add-repo http://down…...

[目标检测] 训练之前要做什么

背景:训练一个Yolo8模型,在训练之前,数据集的处理是影响效果的关键因素。 Step1 定义规则 什么是人/车,比如人的话可能是站着的人,如果是骑电动车/自行车就不算是人。 Step2 收集数据集 1. 自己标注。如果是自己标…...

写了一个QT的定时器

主程序 #include <QCoreApplication> #include "mainwindow.h"int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);MainWindow w;return a.exec(); }mainwindow.cpp程序 #include "mainwindow.h"#include <QDateTime>MainWi…...

LeetCode 力扣热题100 分割等和子集

题目解析 题目&#xff1a;给定一个正整数数组 nums&#xff0c;判断是否可以将数组分成两个和相等的子集。 等价问题&#xff1a; • 计算 nums 的总和 S • 如果 S 是奇数&#xff0c;直接返回 false&#xff08;因为不能均分&#xff09; • 目标是找到一个子集&#xff…...

Hyperlane:轻量级高性能的 Rust Web 后端框架

Hyperlane&#xff1a;开启 Rust Web 开发的新篇章 在当今数字化时代&#xff0c;Web 开发的效率与性能成为了开发者们关注的焦点。随着 Rust 语言的崛起&#xff0c;越来越多的开发者开始探索如何利用 Rust 的高性能和安全性来构建现代 Web 服务。今天&#xff0c;我们非常荣…...

【工具】C#游戏防沉迷小工具

背景介绍 嘿&#xff0c;各位小伙伴&#xff01;今天想跟大家唠唠我为啥要搞这么个防沉迷小工具。 咱都清楚&#xff0c;现在这游戏啊&#xff0c;玩起来那叫一个带劲&#xff0c;但时间一长&#xff0c;不仅眼睛累&#xff0c;心也跟着累。有些游戏&#xff0c;规则定得挺有意…...

深圳南柯电子|净水器EMC测试整改:水质安全与电磁兼容性的双赢

在当今注重健康生活的时代&#xff0c;净水器作为家庭用水安全的第一道防线&#xff0c;其性能与安全性备受关注。其中&#xff0c;电磁兼容性&#xff08;EMC&#xff09;测试是净水器产品上市前不可或缺的一环&#xff0c;它直接关系到产品在复杂电磁环境中的稳定运行及不对其…...

SpeechCraf论文学习

Abstract 核心问题 挑战 语音风格包含细微的多样化信息&#xff08;如情感、语调、节奏&#xff09;&#xff0c;传统基于标签/模板的标注方法难以充分捕捉&#xff0c;制约了语音-语言多模态模型的性能。 数据瓶颈&#xff1a; 大规模数据收集与高质量标注之间存在矛盾&…...

Work【2】:PGP-SAM —— 无需额外提示的自动化 SAM!

文章目录 前言AbstractIntroductionMethodsContextual Feature ModulationProgressive Prototype RefinementPrototype-based Prompt Generator ExperimentDatasetsImplementation DetailsResults and AnalysisAblation Study 总结 前言 和大家分享一下我们发表在 ISBI 2025 上…...

数据安全之策:备份文件的重要性与自动化实践

在信息化高速发展的今天&#xff0c;数据已成为企业运营和个人生活中不可或缺的重要资源。无论是企业的财务报表、客户资料&#xff0c;还是个人的家庭照片、学习笔记&#xff0c;数据的丢失或损坏都可能带来无法挽回的损失。因此&#xff0c;备份文件的重要性日益凸显&#xf…...

uniapp+Vue3 组件之间的传值方法

一、父子传值&#xff08;props / $emit 、ref / $refs&#xff09; 1、props / $emit 父组件通过 props 向子组件传递数据&#xff0c;子组件通过 $emit 触发事件向父组件传递数据。 父组件&#xff1a; // 父组件中<template><view class"container">…...

WebSocket生命周期和vue中使用

ing。。。晚点更新 进入页面&#xff0c;生命周期挂载后&#xff0c;window监听ws连接online 正常情况&#xff0c;心跳包检测避免断开 非正常情况&#xff0c;ws.onclose断开&#xff0c; 判断1000状态吗&#xff0c;触发重连函数。 定时器&#xff0c;重连&#xff0c;判断…...

blender使用初体验(甜甜圈教程)

使用blender 建模了甜甜圈&#xff0c;时间空闲了&#xff0c;但愿能创建点好玩的吸引人的东西...

web3区块链

Web3 是指下一代互联网&#xff0c;也被称为“去中心化互联网”或“区块链互联网”。它是基于区块链技术构建的&#xff0c;旨在创建一个更加开放、透明和用户主导的网络生态系统。以下是关于 Web3 的一些关键点&#xff1a; ### 1. **核心概念** - **去中心化**&#xff1…...

大模型学习笔记------Llama 3模型架构之旋转编码(RoPE)

大模型学习笔记------Llama 3模型架构之旋转编码&#xff08;RoPE&#xff09; 1、位置编码简介1.1 绝对位置编码1.2 相对位置编码 2、旋转编码&#xff08;RoPE&#xff09;2.1 基本概念---旋转矩阵2.2 RoPE计算原理2.2.1 绝对位置编码2.2.2 相对位置编码 3、旋转编码&#xf…...

04 1个路由器配置一个子网的dhcp服务

前言 这是最近一个朋友的 ensp 相关的问题, 这里来大致了解一下 ensp, 计算机网络拓扑 相关基础知识 这里一系列文章, 主要是参照了这位博主的 ensp 专栏 这里 我只是做了一个记录, 自己实际操作了一遍, 增强了一些 自己的理解 当然 这里仅仅是一个 简单的示例, 实际场景…...

安装open-webui

open-webui是一个开源的大语言模型交互界面 前提&#xff1a;Ollama已安装&#xff0c;并下载了deepseek-r1:1.5b模型 拉取镜像 docker pull ghcr.io/open-webui/open-webui:main 配置docker-compose.yml services:open-webui:image: ghcr.io/open-webui/open-webui:mainv…...

HCIA-11.以太网链路聚合与交换机堆叠、集群

链路聚合背景 拓扑组网时为了高可用&#xff0c;需要网络的冗余备份。但增加冗余容易后会出现环路&#xff0c;所以我们部署了STP协议来破除环路。 但是&#xff0c;根据实际业务的需要&#xff0c;为网络不停的增加冗余是现实需要的一部分。 那么&#xff0c;为了让网络冗余…...

不与最大数相同的数字之和(信息学奥赛一本通-1113)

【题目描述】 输出一个整数数列中不与最大数相同的数字之和。 【输入】 输入分为两行&#xff1a; 第一行为N(N为接下来数的个数&#xff0c;N < 100)&#xff1b; 第二行N个整数&#xff0c;数与数之间以一个空格分开&#xff0c;每个整数的范围是-1000,000到1000,000。 【…...

Blender学习方法与技巧

以下是针对Blender零基础用户的学习教程推荐与高效学习方法总结&#xff0c;结合了多个优质资源整理而成&#xff0c;帮助快速入门&#xff1a; 一、Blender学习方法与技巧 制定学习计划与目标 明确短期目标&#xff08;如掌握基础操作&#xff09;和长期目标&#xff08;如独立…...

Amazon RDS ProxySQL 探索(一)

:::info &#x1f4a1; 在日常开发中&#xff0c;开发者们会涉及到数据库的连接&#xff0c;在使用Amazon RDS数据库时&#xff0c;若使用集群模式或者多数据库时&#xff0c;会出现一写多读多个Endpoint&#xff0c;在实际开发中&#xff0c; 开发者们配置数据库连接通常希望走…...

HTML嵌入CSS样式超详解(尊享)

一、行内样式&#xff08;Inline CSS&#xff09; 1. 定义与语法 行内样式是直接在HTML标签中使用style属性来定义样式。这种方式只对当前标签生效。 <tagname style"css 样式">2. 示例 <p style"color: red; font-size: 14px;">这是一个红…...

[C语言基础]13.动态内存管理

动态内存管理 1. 动态内存分配2. 动态内存函数的介绍2.1 malloc2.2 free2.3 calloc2.4 realloc 3. 动态内存错误3.1 NULL指针解引用3.2 动态开辟空间越界访问3.3 非动态开辟内存使用free释放3.4 free释放动态开辟内存的一部分3.5 同一块动态内存多次释放3.6 动态开辟内存未释放…...

200多种算法应用于二维和三维无线传感器网络(WSN)覆盖场景

2.1 二元感知模型 在当前无线传感器网络&#xff08;WSN&#xff09;覆盖场景中&#xff0c;最常见且理想的感知模型是二元感知模型[27]。如图2所示&#xff0c; Q 1 Q_1 Q1​和 Q 2 Q_2 Q2​代表平面区域内的两个随机点。 Q 1 Q_1 Q1​位于传感器的检测区域内&#xff0c;其感…...

模拟类似 DeepSeek 的对话

以下是一个完整的 JavaScript 数据流式获取实现方案&#xff0c;模拟类似 DeepSeek 的对话式逐段返回效果。包含前端实现、后端模拟和详细注释&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><titl…...