SpringBoot之请求的详细解析
1. 请求
在本章节呢,我们主要讲解,如何接收页面传递过来的请求数据。
1.1 Postman
之前我们课程中有提到当前最为主流的开发模式:前后端分离

在这种模式下,前端技术人员基于"接口文档",开发前端程序;后端技术人员也基于"接口文档",开发后端程序。
由于前后端分离,对我们后端技术人员来讲,在开发过程中,是没有前端页面的,那我们怎么测试自己所开发的程序呢?
方式1:像之前SpringBoot入门案例中一样,直接使用浏览器。在浏览器中输入地址,测试后端程序。
-
弊端:在浏览器地址栏中输入地址这种方式都是GET请求,如何我们要用到POST请求怎么办呢?
-
要解决POST请求,需要程序员自己编写前端代码(比较麻烦)
-
方式2:使用专业的接口测试工具(课程中我们使用Postman工具)
1.1.1 介绍

-
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。
Postman原是Chrome浏览器的插件,可以模拟浏览器向后端服务器发起任何形式(如:get、post)的HTTP请求
使用Postman还可以在发起请求时,携带一些请求参数、请求头等信息
-
作用:常用于进行接口测试
-
特征
-
简单
-
实用
-
美观
-
大方
-
1.1.2 安装

双击资料中提供的Postman-win64-8.3.1-Setup.exe即可自动安装。

安装完成之后,进入页面中会提示有新版本可以升级(无需升级)

界面介绍:

如果我们需要将测试的请求信息保存下来,就需要创建一个postman的账号,然后登录之后才可以。



登录完成之后,可以创建工作空间:



创建请求:

点击"Save",保存当前请求




1.2 简单参数
简单参数:在向服务器发起请求时,向服务器传递的是一些普通的请求数据。

那么在后端程序中,如何接收传递过来的普通参数数据呢?
我们在这里讲解两种方式:
-
原始方式
-
SpringBoot方式
1.2.1 原始方式
在原始的Web程序当中,需要通过Servlet中提供的API:HttpServletRequest(请求对象),获取请求的相关信息。比如获取请求参数:
Tomcat接收到http请求时:把请求的相关信息封装到HttpServletRequest对象中
在Controller中,我们要想获取Request对象,可以直接在方法的形参中声明 HttpServletRequest 对象。然后就可以通过该对象来获取请求信息:
//根据指定的参数名获取请求参数的数据值
String request.getParameter("参数名")
@RestController
public class RequestController {//原始方式@RequestMapping("/simpleParam")public String simpleParam(HttpServletRequest request){// http://localhost:8080/simpleParam?name=Tom&age=10// 请求参数: name=Tom&age=10 (有2个请求参数)// 第1个请求参数: name=Tom 参数名:name,参数值:Tom// 第2个请求参数: age=10 参数名:age , 参数值:10
String name = request.getParameter("name");//name就是请求参数名String ageStr = request.getParameter("age");//age就是请求参数名
int age = Integer.parseInt(ageStr);//需要手动进行类型转换System.out.println(name+" : "+age);return "OK";}
}
以上这种方式,我们仅做了解。(在以后的开发中不会使用到)
1.2.2 SpringBoot方式
在Springboot的环境中,对原始的API进行了封装,接收参数的形式更加简单。 如果是简单参数,参数名与形参变量名相同,定义同名的形参即可接收参数。
@RestController
public class RequestController {// http://localhost:8080/simpleParam?name=Tom&age=10// 第1个请求参数: name=Tom 参数名:name,参数值:Tom// 第2个请求参数: age=10 参数名:age , 参数值:10//springboot方式@RequestMapping("/simpleParam")public String simpleParam(String name , Integer age ){//形参名和请求参数名保持一致System.out.println(name+" : "+age);return "OK";}
}
postman测试( GET 请求):

postman测试( POST请求 ):

结论:不论是GET请求还是POST请求,对于简单参数来讲,只要保证请求参数名和Controller方法中的形参名保持一致,就可以获取到请求参数中的数据值。
1.2.3 参数名不一致
如果方法形参名称与请求参数名称不一致,controller方法中的形参还能接收到请求参数值吗?
@RestController
public class RequestController {// http://localhost:8080/simpleParam?name=Tom&age=20// 请求参数名:name
//springboot方式@RequestMapping("/simpleParam")public String simpleParam(String username , Integer age ){//请求参数名和形参名不相同System.out.println(username+" : "+age);return "OK";}
}
答案:运行没有报错。 controller方法中的username值为:null,age值为20
-
结论:对于简单参数来讲,请求参数名和controller方法中的形参名不一致时,无法接收到请求数据
那么如果我们开发中,遇到了这种请求参数名和controller方法中的形参名不相同,怎么办?
解决方案:可以使用Spring提供的@RequestParam注解完成映射
在方法形参前面加上 @RequestParam 然后通过value属性执行请求参数名,从而完成映射。代码如下:
@RestController
public class RequestController {// http://localhost:8080/simpleParam?name=Tom&age=20// 请求参数名:name
//springboot方式@RequestMapping("/simpleParam")public String simpleParam(@RequestParam("name") String username , Integer age ){System.out.println(username+" : "+age);return "OK";}
}
注意事项:
@RequestParam中的required属性默认为true(默认值也是true),代表该请求参数必须传递,如果不传递将报错
如果该参数是可选的,可以将required属性设置为false
@RequestMapping("/simpleParam") public String simpleParam(@RequestParam(name = "name", required = false) String username, Integer age){ System.out.println(username+ ":" + age); return "OK"; }
相关文章:
SpringBoot之请求的详细解析
1. 请求 在本章节呢,我们主要讲解,如何接收页面传递过来的请求数据。 1.1 Postman 之前我们课程中有提到当前最为主流的开发模式:前后端分离 在这种模式下,前端技术人员基于"接口文档",开发前端程序&…...
mac 环境下 goframe安装GF开发工具 gf-cli(安装包方式安装)
mac 环境下 goframe安装GF开发工具 gf-cli(安装包方式安装) 安装包网址 链接: link 终端输入命令进行安装 ./gf_darwin_amd64 但是产生如下报错,无法安装 使用一下命令给安装权限 chmod 0777 gf_darwin_amd64 && ./gf_darwin_a…...
Navicat 技术指引 | 适用于 GaussDB 分布式的数据迁移工具
Navicat Premium(16.3.3 Windows 版或以上)正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结…...
【TiDB理论知识10】TiDB6.0新特性
新特性 Placement Rules in SQL 小表缓存 内存悲观锁 Top SQL TiDB Enterprise Manager 一 Placement Rules in SQL Placement Rules in SQL 之前会遇到的问题 比如 北京的业务需要访问 T2 和 T3表 ,但是T3表的数据在纽约 纽约的业务需要问访T4 T5 T6表…...
MySQL笔记-第15章_存储过程与函数
视频链接:【MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板】 文章目录 第15章_存储过程与函数1. 存储过程概述1.1 理解1.2 分类 2. 创建存储过程2.1 语法分析2.2 代码举例 3. 调用存储过程3.1 调用格式3.2 代码举…...
12月12日作业
设计一个闹钟 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> #include <QTime> #include <QTime> #include <QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass …...
基于Python+WaveNet+MFCC+Tensorflow智能方言分类—深度学习算法应用(含全部工程源码)(二)
目录 前言引言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理1)数据介绍2)数据测试3)数据处理 相关其它博客工程源代码下载其它资料下载 前言 博主前段时间发布了一篇有关方言识别和分类模型训练的博客,在读者…...
secrets --- 生成管理密码的安全随机数
3.6 新版功能. 源代码: Lib/secrets.py secrets 模块用于生成高度加密的随机数,适于管理密码、账户验证、安全凭据及机密数据。 最好用 secrets 替代 random 模块的默认伪随机数生成器,该生成器适用于建模和模拟,不宜用于安全与加密。 参见…...
宇视科技视频监控 main-cgi 文件信息泄露漏洞
宇视科技视频监控 main-cgi 文件信息泄露漏洞 一、产品简介二、漏概述三、复现环境四、漏洞检测手工抓包自动化检测 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#…...
【数学建模】《实战数学建模:例题与讲解》第十一讲-因子分析、聚类与主成分(含Matlab代码)
【数学建模】《实战数学建模:例题与讲解》第十一讲-因子分析、聚类与主成分(含Matlab代码) 基本概念聚类分析Q型聚类分析R型聚类分析 主成分分析因子分析 习题10.11. 题目要求2.解题过程3.程序4.结果 习题10.21. 题目要求2.解题过程3.程序4.结…...
Python查找列表中不重复的数字
Python每日一练 文章目录 Python每日一练问题:函数输入函数输出 代码实现示例输入:示例输出: 总结 问题: 编写一个程序来查找列表中不重复的数字。 定义函数find_unique(),它接受一个列表作为参数。 在函数内部&…...
用docker创建jmeter容器,如何实现性能测试?
用 docker 创建 jmeter 容器, 实现性能测试 我们都知道,jmeter可以做接口测试,也可以用于性能测试,现在企业中性能测试也大多使用jmeter。docker是最近这些年流行起来的容器部署工具,可以创建一个容器,然后把项目放到…...
pytest-fixtured自动化测试详解
fixture的作用 1.同unittest的setup和teardown,作为测试前后的初始化设置。 fixture的使用 1.作为前置条件使用 2.fixture的的作用范围 1.作为前置条件使用 pytest.fixture() def a():return 3def test_b(a):assert a3 2.fixture的作用范围 首先实例化更高范围的fixture…...
计算机网络:应用层(一)
我最近开了几个专栏,诚信互三! > |||《算法专栏》::刷题教程来自网站《代码随想录》。||| > |||《C专栏》::记录我学习C的经历,看完你一定会有收获。||| > |||《Linux专栏》࿱…...
mybatis的快速入门以及spring boot整合mybatis(二)
需要用到的SQL脚本: CREATE TABLE dept (id int unsigned PRIMARY KEY AUTO_INCREMENT COMMENT ID, 主键,name varchar(10) NOT NULL UNIQUE COMMENT 部门名称,create_time datetime DEFAULT NULL COMMENT 创建时间,update_time datetime DEFAULT NULL COMMENT 修改…...
lua基本语法使用
Lua 是一个小巧的脚本语言。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。 1.基本语法 注解 -- 单行 -- [[ ]] -- 多行 …...
Git远程操作
目录 1.远程操作 1.1理解分布式版本控制系统 1.2远程仓库. 1.2.1新建远程仓库 1.2.2克隆远程仓库 1.2.3向远程仓库推送 1.2.4拉取远程仓库 1.3配置Git 1.3.1忽略特殊文件 1.3.2给命令配置别名 2.标签管理 2.1理解标签 2.2创建标签 2.3操作标签 1.远程操作 1.1理…...
链表基础知识(一、单链表)
一、链表表示和实现 顺序表的问题及思考 问题: 1. 中间/头部的插入删除,时间复杂度为O(N) 2. 增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。 3. 增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当…...
mysql的ON DELETE CASCADE 和ON DELETE RESTRICT区别
ON DELETE CASCADE 和 ON DELETE RESTRICT 是 MySQL 中两种不同的外键约束级联操作。它们之间的主要区别在于当主表中的记录被删除时,子表中相关记录的处理方式。 ON DELETE CASCADE: 当在主表中删除一条记录时,所有与之相关的子表中…...
如何快速将图片转为excel?
一、打开金鸣表格文字识别软件。 二、点击添加文件按钮,在打开的窗口中选择目标图片,然后点击“打开”,将图片添加进待识别的列表中。 三、点击提交识别或识别全部。 四、识别完成后点击“打开文件”即可打开识别好的结果文件(EXC…...
为什么在银河麒麟上配置telnet?安全风险与替代方案探讨
银河麒麟系统中Telnet协议的深度安全剖析与现代替代方案 在国产操作系统银河麒麟上配置传统网络服务时,技术决策者常面临一个经典困境:是沿用熟悉的Telnet协议快速解决问题,还是投入资源迁移到更安全的现代方案?这个问题看似简单&…...
用AI辅助编程踩坑记:CH32V003驱动WS2812B,PWM+DMA配置避雷指南
CH32V003驱动WS2812B避坑实战:当AI生成的PWMDMA代码遇到现实 第一次尝试用AI辅助编写CH32V003驱动WS2812B的代码时,我天真地以为只要把芯片手册扔给AI就能得到完美运行的代码。直到LED灯带显示出诡异的彩虹乱码,我才意识到自己掉进了AI挖的多…...
告别手动整理!Qwen3-ASR-1.7B帮你自动转写会议录音,5分钟部署即用
告别手动整理!Qwen3-ASR-1.7B帮你自动转写会议录音,5分钟部署即用 1. 语音识别的新选择 还在为会议录音转写而烦恼吗?传统的手动转写不仅耗时耗力,而且准确率难以保证。Qwen3-ASR-1.7B语音识别模型的出现,彻底改变了…...
【硬件分享】PCIE283全高PCIe3.0x8光纤采集卡,XCKU060+双40G光口
分享一款由北京匠行科技推出PCIe283 为标准的全高PCIe 3.0 x8 光纤采集卡。主处理器采用Xilinx Ultrascale系列FPGA XCKU060-FFVA1156I,板卡支持2路QSFP光口,2组 64bit DDR4 、每组容量2GB,预留16路LVDS、32 路LVTTL3.3V。核心配置FPGAXilinx…...
百川2-13B-Chat效果展示:用Python模拟百川2推理过程(token-by-token生成可视化)
百川2-13B-Chat效果展示:用Python模拟百川2推理过程(token-by-token生成可视化) 1. 项目介绍 1.1 百川2-13B-Chat模型概述 百川2-13B-Chat是百川智能推出的130亿参数对话大模型,其4bit量化版本在保持性能的同时大幅降低了显存需…...
OpenClaw隐私方案:Kimi-VL-A3B-Thinking本地处理医疗影像数据分析
OpenClaw隐私方案:Kimi-VL-A3B-Thinking本地处理医疗影像数据分析 1. 为什么医疗数据必须留在本地? 去年参与一个医学研究项目时,团队需要分析3000多份CT影像。当我们尝试使用某云服务时,合规部门直接叫停——这些包含患者面部特…...
小米智能家居与Home Assistant集成实战指南:从功能解析到问题诊断完全解析
小米智能家居与Home Assistant集成实战指南:从功能解析到问题诊断完全解析 【免费下载链接】ha_xiaomi_home Xiaomi Home Integration for Home Assistant 项目地址: https://gitcode.com/GitHub_Trending/ha/ha_xiaomi_home 小米智能家居集成项目࿰…...
Qwen3-VL-8B-Instruct-GGUF效果展示:同一张餐厅菜单图,模型准确识别菜品+价格+辣度标签
Qwen3-VL-8B-Instruct-GGUF效果展示:同一张餐厅菜单图,模型准确识别菜品价格辣度标签 1. 模型效果惊艳亮相 今天要给大家展示的是一个让人眼前一亮的多模态模型——Qwen3-VL-8B-Instruct-GGUF。这个模型最厉害的地方在于,它能在普通的硬件设…...
sing-box性能调优:从内存占用到吞吐量的全面优化
sing-box性能调优:从内存占用到吞吐量的全面优化 引言 sing-box作为通用代理平台(The universal proxy platform),在高并发网络环境下的性能表现直接影响用户体验。本文将从内存管理、连接复用、吞吐量优化三个维度,…...
STEP3-VL-10B一文详解:多模态对齐损失函数设计与人类反馈强化学习细节
STEP3-VL-10B一文详解:多模态对齐损失函数设计与人类反馈强化学习细节 1. 引言:为什么一个“小”模型能比肩“大”模型? 最近,一个只有100亿参数的“小”模型在技术圈里引起了不小的轰动。它就是阶跃星辰开源的STEP3-VL-10B。你…...
