【SpringBoot Web框架实战教程】03 SpingBoot 获取 http 请求参数
不积跬步,无以至千里;不积小流,无以成江海。大家好,我是闲鹤,微信:xxh_1459,十多年开发、架构经验,先后在华为、迅雷服役过,也在高校从事教学3年;目前已创业了7年多,主要从事物联网/车联网相关领域和业务。喜欢交友、骑行、写毛笔字、弹吉他、折腾硬件和写代码。
导读
这是一系列关于 SpringBoot Web框架实战 的教程,从项目的创建,到一个完整的 web 框架(包括异常处理、拦截器、context 上下文等);从0开始,到一个可以直接运用在生产环境中的web框架。而且所有源码均开源:https://github.com/xiongxianhe/springboot
正文
上一遍《Spring Boot 返回 JSON》 中我们学习了如何从 Spring Boot 返回 json 数据,这篇我们继续讨论,Spring Boot 如何获取 HTTP 传递的参数。
从 HTTP 协议中,我们可知,传递参数的方式有这么几种:
1. 在 uri 中通过拼接查询字符串传递,这是我们常用的 HTTP GET 方式;
2. 在 HTTP 中的 body 中传递,由于 body 中传递数据的大小不限,所以这种方式可以传递多种格式的数据,如:multipart/form-data、application/x-www-form-urlencode、application/json、application/xml、text/plain、text/html 等;这类方式为 HTTP POST 方式。
下面我们讨论几种常用的方式:
方式一:在 controller 类的 action 方法中,把所需要的参数作为 action 方法的参数(get/post)
@RequestMapping("/user/login")public String login(String name, String pwd) {String res = "you input: name:" + name + "; pwd:" + pwd;return res;}
这种方式同时支持这种方式同时支持 get 和 post(仅支持 multipart/form-data、application/x-www-form-urlencode )
方式二:在 controller 类的 action 方法中, 通过 HttpServletRequest 作为 action 方法的参数(get/post)
@RequestMapping("/user/login2")
public String login2(HttpServletRequest request) {String name = request.getParameter("name");String pwd = request.getParameter("pwd");return "you input: name:" + name + "; pwd:" + pwd;
}
这种方式同时支持这种方式同时支持 get 和 post(仅支持 multipart/form-data、application/x-www-form-urlencode )
方式三:在 controller 类的 action 方法中, 通过 bean 作为 action 方法的参数(get/post)
@RequestMapping("/user/login3")
public String login3(User user) {return user.toString();
}
User.java 内容:
package com.jdz.beans;public class User {private Integer uid;private String name;private String pwd;@Overridepublic String toString() {return String.format("uid: %d name: %s pwd:%s", this.uid, this.name, this.pwd);}
}
这种方式同时支持这种方式同时支持 get 和 post(仅支持 multipart/form-data、application/x-www-form-urlencode )
方式四:通过 @PathVariable 获取 uri 路径中的参数(get)
@RequestMapping(value = "/user/login4/{name}/{pwd}", method = RequestMethod.GET)
public String login4(@PathVariable String name, @PathVariable String pwd) {return "you input: name:" + name + "; pwd:" + pwd;
}
请求方式:
http://localhost:8080/user/login4/name-lg4/pwd-lg4
这种方式只适合 get 方法
方式五:通过 @RequestParam 注解(get/post)
@RequestMapping("/user/login5")
public String login5(@RequestParam(value = "name", required = true) String name, @RequestParam("pwd") String pwd) {return "you input: name:" + name + "; pwd:" + pwd;
}
这种方式同时支持这种方式同时支持 get 和 post(仅支持 multipart/form-data、application/x-www-form-urlencode )
方式六:通过 @RequestParam 注解,并用 Map 来接收参数(get/post)
@RequestMapping("/user/login6")
public String login6(@RequestParam Map<String, Object> params) {return "you input: name:" + params.get("name") + "; pwd:" + params.get("pwd");
}
这种方式同时支持这种方式同时支持 get 和 post(仅支持 multipart/form-data、application/x-www-form-urlencode )
方式七:通过 @RequestBody 注解,并用 Map 来接收参数(json)
@RequestMapping("/user/login7")
public String login7(@RequestBody Map<String, Object> params) {return "you input: name:" + params.get("name") + "; pwd:" + params.get("pwd");
}
这种方式适合 application/json ,用于获取 json 格式
其他
在此基础上还有其他的方式,上面主要列举了一些常用的用法,每种用法可以根据实际场景进行选择使用。
源码:https://github.com/xiongxianhe/springboot.git
系列文章
【SpringBoot Web框架实战(开源)】001 使用 pom 方式创建 SpringBoot 第一个项目
【SpringBoot Web框架实战教程(开源)】02 SpringBoot 返回 JSON
近期文章
# 车联网
【自动化运维】不要相信人,把所有的东西都交给机器去处理
从华为无线网络框架说Dispatch服务
百万级物联网框架设计
高并发服务器之泄峰
# 硬件
stm32驱动直流电机实现启动/加速/减速/倒车/停车等功能
stm32 定时器输出比较(OC)与PWM的理解和应用
stm32 定时器中断
相关文章:
【SpringBoot Web框架实战教程】03 SpingBoot 获取 http 请求参数
不积跬步,无以至千里;不积小流,无以成江海。大家好,我是闲鹤,微信:xxh_1459,十多年开发、架构经验,先后在华为、迅雷服役过,也在高校从事教学3年;目前已创业了…...
Mac14.1.2 M1芯片免费读写ntfs硬盘-亲测有效,免费!!!
1. 安装homebrew 打开终端,使用以下命令 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 根据提示逐步完成即可,镜像选择我这里都是保持1的选项。 2. 重启终端 安装完成homebrew后,需…...
手写SpringMVC之ApplicationContextListener
什么是Spring MVC? Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就包含在Spring Framework中。正式名称“Spring Web MVC”来自其源模块的名称( spring-webmvc ),但它通常被称为“Spring MVC”。 手写…...
Paimon 在汽车之家的业务实践
汽车之家基于Paimon的实践 摘要:本文分享自汽车之家的王刚、范文、李乾⽼师。介绍了汽车之家基于 Paimon 的一些实践,和一些背景。内容主要为以下四部分: 一、背景 二、业务实践 三、paimon 优化实践 四、未来规划 一、背景 在使用Paimon之前…...
2024-06-27 问AI: 介绍一下 LLM building process
文心一言 LLM(Large Language Model,大语言模型)的构建过程是一个复杂且资源密集的任务,涉及多个关键步骤。以下是LLM构建过程的主要阶段,以及每个阶段的一些关键考虑因素: 数据收集与预处理:…...
猫也有自动厕所上了吗?自费分享好用的智能猫砂盆,看完不亏。
还有人在用普通猫砂盘吗?之前我也是用的普通猫砂盘,但我发现只要我在上班时间,我就无法顾忌到小猫的便便,但又不想回家就闻到一股臭味,更何况现在夏天也快到了,便便残留一会就会发酵发臭,导致生…...
《分析模式》漫谈07-怎样把一张图从不严谨改到严谨
DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 下图是《分析模式》原书第2章的图2.10,里面有一些错误和考虑不周的地方: 2004中译本和2020中译本的翻译如下: 基本上都是照搬,没有改过…...
纯干货丨知乎广告投放流程和避坑攻略
精准有效的广告投放企业获客的关键,知乎作为中国最大的知识分享平台,拥有着高质量的用户群体和高度的用户粘性,为广告主提供了独一无二的品牌传播与产品推广平台。然而,如何在知乎上高效、精准地进行广告投放,避免不必…...
mac 安装mysql启动报错 ERROR!The server quit without update PID file
发现问题: mac安装mysql初次启动报错: 一般出现这种问题,大多是文件夹权限,或者以前安装mysql卸载不干净导致。首先需要先确定问题出在哪?根据提示我们可以打开mysql的启动目录,查看启动日志。 问题解决&a…...
TypeScrip环境安装与基础
TS环境安装与基础 文章目录 一、什么是TypeScript(微软开发的)二、TypeScript的特性三、环境安装node安装配置详解(常用:outDir,strict ) 四、注释方式五、数据类型 一、什么是TypeScript(微软开…...
6.27学习总结
一、高数 1、斯托克斯公式(曲线<->曲面):看清顺时针(负)/逆时针(正) 2、曲面方程变二重积分: 前、上、右:正; 后、下、左:负; 3…...
选择第三方软件测试机构做验收测试的好处简析
企事业单位在自行开发完软件系统或委托软件开发公司生产软件之后,有一个必经流程就是验收测试,以验证该产品是否符合用户需求、是否可以上线。为了客观评估所委托生产的软件质量,第三方软件测试机构往往成为企事业单位做验收测试的首选&#…...
【图书推荐】CPython设计与实现“适合所有Python工程师阅读的书籍”
目录 一、图书推荐 |【CPython设计与实现】 1.1、书籍介绍 1.2、内容简介 1.3、适合哪些人阅读 1.4、作者译者简介 1.5、购买链接 一、图书推荐 |【CPython设计与实现】 "深入Python核心,揭秘CPython的设计智慧!📖 对于每一位热衷…...
原创作品—医疗行业软件界面UI、交互设计
在医疗行业大屏UI设计中,首要的是以用户为中心,深入理解医生、护士、管理层等用户群体的具体需求和工作流程。大屏设计应直观展示关键医疗数据、患者信息、设备状态等,确保用户能够迅速、准确地获取所需信息。同时,功能布局应合理…...
[C++深入] --- vector容器浅析
vector是一个封装了动态大小数组的顺序容器,它能够存放各种类型的对象。 可以删除元素、可以插入元素、可以查找元素,做这些工作我们无需管理容器内存。容器内存管理,这种脏活累活全部交由vector管理。了解一下vector的内存管理策略,能够更加充分的利用内存。 1 vector内存…...
用MySQL和navicatpremium做一个项目—(财务管理系统)。
1 ER图缩小的话怕你们看不清,所以截了两张图 2 vsdx绘图结果 3DDL和DML,都有点长分了好多次上传,慢慢看 DDL -- 用户表 CREATE TABLE users (user_id INT AUTO_INCREMENT PRIMARY KEY COMMENT 用户ID,username VARCHAR(50) NOT NULL UNIQUE COMMENT 用…...
Jenkins教程-5-gitee自动化测试任务构建
上一小节我们学习了Jenkins构建gitlab自动化测试任务的方法,本小节我们讲解一下gitee自动化测试任务的构建方法。 接下来我们以windows系统为例,讲解一下构建实际自动化测试任务的具体步骤。 安装git和gitee插件 点击进入Jenkins插件管理页面 安装完插…...
CAN-bus总线在冷链运输中的应用
CAN-bus总线在冷链运输中的应用 如图1所示,疫苗冷链是指为保证疫苗从疫苗生产企业到接种单位运转过程中的质量而装备的存储、运输冷藏设施、设备。由于疫苗对温度敏感,从疫苗制造的部门到疫苗使用的现场之间的每一个环节,都可能因温度过高而失效。在储运过程中,一旦温度超…...
Vue 与 React 区别
Vue.js和React是现代Web开发中两种非常流行的前端框架,两者在**核心概念、组件以及生态系统扩展性**等方面存在区别。具体分析如下: 1. **核心概念** - **Vue**:Vue是一个渐进式JavaScript框架,它致力于视图层,易于上手…...
docker+[nginx] 部署nacos2.x 集群
docker+[nginx] 部署nacos2.x 集群 由于机器有限,本文搭建伪集群 准备: nacos1 :192.168.50.9:8848 nacos2:192.168.50.9:8858 nacos3:192.168.50.9:8868 mysql nginx 【可选,见文末】 创建容器共享网络 便于直接使用容器名连接mysql,如果不创建,连接mysql直接使用i…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
