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

【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 请求参数

不积跬步&#xff0c;无以至千里&#xff1b;不积小流&#xff0c;无以成江海。大家好&#xff0c;我是闲鹤&#xff0c;微信&#xff1a;xxh_1459&#xff0c;十多年开发、架构经验&#xff0c;先后在华为、迅雷服役过&#xff0c;也在高校从事教学3年&#xff1b;目前已创业了…...

Mac14.1.2 M1芯片免费读写ntfs硬盘-亲测有效,免费!!!

1. 安装homebrew 打开终端&#xff0c;使用以下命令 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 根据提示逐步完成即可&#xff0c;镜像选择我这里都是保持1的选项。 2. 重启终端 安装完成homebrew后&#xff0c;需…...

手写SpringMVC之ApplicationContextListener

什么是Spring MVC&#xff1f; Spring Web MVC是基于Servlet API构建的原始Web框架&#xff0c;从一开始就包含在Spring Framework中。正式名称“Spring Web MVC”来自其源模块的名称&#xff08; spring-webmvc &#xff09;&#xff0c;但它通常被称为“Spring MVC”。 手写…...

Paimon 在汽车之家的业务实践

汽车之家基于Paimon的实践 摘要&#xff1a;本文分享自汽车之家的王刚、范文、李乾⽼师。介绍了汽车之家基于 Paimon 的一些实践&#xff0c;和一些背景。内容主要为以下四部分&#xff1a; 一、背景 二、业务实践 三、paimon 优化实践 四、未来规划 一、背景 在使用Paimon之前…...

2024-06-27 问AI: 介绍一下 LLM building process

文心一言 LLM&#xff08;Large Language Model&#xff0c;大语言模型&#xff09;的构建过程是一个复杂且资源密集的任务&#xff0c;涉及多个关键步骤。以下是LLM构建过程的主要阶段&#xff0c;以及每个阶段的一些关键考虑因素&#xff1a; 数据收集与预处理&#xff1a;…...

猫也有自动厕所上了吗?自费分享好用的智能猫砂盆,看完不亏。

还有人在用普通猫砂盘吗&#xff1f;之前我也是用的普通猫砂盘&#xff0c;但我发现只要我在上班时间&#xff0c;我就无法顾忌到小猫的便便&#xff0c;但又不想回家就闻到一股臭味&#xff0c;更何况现在夏天也快到了&#xff0c;便便残留一会就会发酵发臭&#xff0c;导致生…...

《分析模式》漫谈07-怎样把一张图从不严谨改到严谨

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 下图是《分析模式》原书第2章的图2.10&#xff0c;里面有一些错误和考虑不周的地方&#xff1a; 2004中译本和2020中译本的翻译如下&#xff1a; 基本上都是照搬&#xff0c;没有改过…...

纯干货丨知乎广告投放流程和避坑攻略

精准有效的广告投放企业获客的关键&#xff0c;知乎作为中国最大的知识分享平台&#xff0c;拥有着高质量的用户群体和高度的用户粘性&#xff0c;为广告主提供了独一无二的品牌传播与产品推广平台。然而&#xff0c;如何在知乎上高效、精准地进行广告投放&#xff0c;避免不必…...

mac 安装mysql启动报错 ERROR!The server quit without update PID file

发现问题&#xff1a; mac安装mysql初次启动报错&#xff1a; 一般出现这种问题&#xff0c;大多是文件夹权限&#xff0c;或者以前安装mysql卸载不干净导致。首先需要先确定问题出在哪&#xff1f;根据提示我们可以打开mysql的启动目录&#xff0c;查看启动日志。 问题解决&a…...

TypeScrip环境安装与基础

TS环境安装与基础 文章目录 一、什么是TypeScript&#xff08;微软开发的&#xff09;二、TypeScript的特性三、环境安装node安装配置详解&#xff08;常用&#xff1a;outDir&#xff0c;strict &#xff09; 四、注释方式五、数据类型 一、什么是TypeScript&#xff08;微软开…...

6.27学习总结

一、高数 1、斯托克斯公式&#xff08;曲线<->曲面&#xff09;&#xff1a;看清顺时针&#xff08;负&#xff09;/逆时针&#xff08;正&#xff09; 2、曲面方程变二重积分&#xff1a; 前、上、右&#xff1a;正&#xff1b; 后、下、左&#xff1a;负&#xff1b; 3…...

选择第三方软件测试机构做验收测试的好处简析

企事业单位在自行开发完软件系统或委托软件开发公司生产软件之后&#xff0c;有一个必经流程就是验收测试&#xff0c;以验证该产品是否符合用户需求、是否可以上线。为了客观评估所委托生产的软件质量&#xff0c;第三方软件测试机构往往成为企事业单位做验收测试的首选&#…...

【图书推荐】CPython设计与实现“适合所有Python工程师阅读的书籍”

目录 一、图书推荐 |【CPython设计与实现】 1.1、书籍介绍 1.2、内容简介 1.3、适合哪些人阅读 1.4、作者译者简介 1.5、购买链接 一、图书推荐 |【CPython设计与实现】 "深入Python核心&#xff0c;揭秘CPython的设计智慧&#xff01;&#x1f4d6; 对于每一位热衷…...

原创作品—医疗行业软件界面UI、交互设计

在医疗行业大屏UI设计中&#xff0c;首要的是以用户为中心&#xff0c;深入理解医生、护士、管理层等用户群体的具体需求和工作流程。大屏设计应直观展示关键医疗数据、患者信息、设备状态等&#xff0c;确保用户能够迅速、准确地获取所需信息。同时&#xff0c;功能布局应合理…...

[C++深入] --- vector容器浅析

vector是一个封装了动态大小数组的顺序容器,它能够存放各种类型的对象。 可以删除元素、可以插入元素、可以查找元素,做这些工作我们无需管理容器内存。容器内存管理,这种脏活累活全部交由vector管理。了解一下vector的内存管理策略,能够更加充分的利用内存。 1 vector内存…...

用MySQL和navicatpremium做一个项目—(财务管理系统)。

1 ER图缩小的话怕你们看不清&#xff0c;所以截了两张图 2 vsdx绘图结果 3DDL和DML,都有点长分了好多次上传&#xff0c;慢慢看 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自动化测试任务的方法&#xff0c;本小节我们讲解一下gitee自动化测试任务的构建方法。 接下来我们以windows系统为例&#xff0c;讲解一下构建实际自动化测试任务的具体步骤。 安装git和gitee插件 点击进入Jenkins插件管理页面 安装完插…...

CAN-bus总线在冷链运输中的应用

CAN-bus总线在冷链运输中的应用 如图1所示,疫苗冷链是指为保证疫苗从疫苗生产企业到接种单位运转过程中的质量而装备的存储、运输冷藏设施、设备。由于疫苗对温度敏感,从疫苗制造的部门到疫苗使用的现场之间的每一个环节,都可能因温度过高而失效。在储运过程中,一旦温度超…...

Vue 与 React 区别

Vue.js和React是现代Web开发中两种非常流行的前端框架&#xff0c;两者在**核心概念、组件以及生态系统扩展性**等方面存在区别。具体分析如下&#xff1a; 1. **核心概念** - **Vue**&#xff1a;Vue是一个渐进式JavaScript框架&#xff0c;它致力于视图层&#xff0c;易于上手…...

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…...

CC2530项目实战:用OLED屏做个简易温湿度显示器(基于DHT11传感器)

CC2530实战&#xff1a;基于DHT11的OLED温湿度监测系统开发指南 在嵌入式开发领域&#xff0c;将传感器数据可视化是物联网项目的核心技能之一。CC2530作为一款经典的51内核单片机&#xff0c;搭配0.96寸OLED屏幕和DHT11温湿度传感器&#xff0c;可以构建一个低成本但功能完整的…...

面向密集预测任务的神经网络架构搜索:从原理到工程实践

1. 项目概述与核心价值“神经网络架构搜索在密集预测任务中的应用与优化”&#xff0c;这个标题听起来很学术&#xff0c;但背后其实是我们这些在一线搞计算机视觉、图像分割、深度估计的工程师和研究员们每天都在琢磨的“硬骨头”。简单来说&#xff0c;它探讨的是如何让机器自…...

嵌入式与半导体年度技术趋势:从RISC-V、Matter到EDA 2.0与软件定义汽车

1. 从年度回顾看嵌入式与半导体行业的技术脉搏又到年底复盘时&#xff0c;各大技术媒体都在梳理过去一年的重磅内容。最近看到EE Times整理其编辑Nitin Dahad的2022年度六大精选故事&#xff0c;感触颇深。这六篇文章&#xff0c;像六个精准的切片&#xff0c;生动勾勒了过去一…...

Atheon OpenClaw插件:构建Discord Webhook自动化通知系统的核心指南

1. 项目概述与核心价值最近在折腾一个叫 Atheon OpenClaw Plugin 的开源项目&#xff0c;这名字听起来有点酷&#xff0c;是吧&#xff1f;简单来说&#xff0c;这是一个为 Discord 机器人框架 Atheon 设计的插件&#xff0c;核心功能是实现一个“开放之爪”——也就是一个灵活…...

构建动态AI伦理评估工具链:从公平性、可解释性到全流程治理

1. 项目概述&#xff1a;为什么我们需要一个动态的AI伦理评估工具&#xff1f;在过去的几年里&#xff0c;我参与过不少AI项目的评审和落地&#xff0c;一个越来越强烈的感受是&#xff1a;大家对于“AI伦理”这四个字&#xff0c;已经从最初的“口号式”关注&#xff0c;变成了…...

别再硬怼tabular了!用LaTeX的minipage环境搞定不规则子图排版(附代码对比)

LaTeX排版革命&#xff1a;用minipage环境实现不规则子图的高效布局 在学术写作和技术文档中&#xff0c;图片排版常常成为LaTeX用户的痛点。当遇到需要将不同尺寸的子图组合成一个整体时&#xff0c;传统方法往往陷入复杂的表格嵌套和间距调整的泥潭。本文将介绍一种更优雅的解…...

国产AI模型平台突围战:模力方舟如何用开源生态打破大厂垄断?

当全球AI竞赛进入深水区&#xff0c;中国开发者正面临关键抉择&#xff1a;是继续依赖封闭的大厂生态&#xff0c;还是拥抱更开放的本土化解决方案&#xff1f;2023年中国AI模型平台市场数据显示&#xff0c;百度千帆、阿里ModelScope、华为ModelArts三大平台占据72%市场份额&a…...

GitAhead本地化配置详解:打造最适合你的中文Git环境

GitAhead本地化配置详解&#xff1a;打造最适合你的中文Git环境 【免费下载链接】gitahead Understand your Git history! 项目地址: https://gitcode.com/gh_mirrors/gi/gitahead GitAhead是一款功能强大的Git客户端工具&#xff0c;旨在帮助开发者更直观地理解和管理G…...

蒙特卡洛方法赋能智能体决策:原理、实现与工程实践

1. 项目概述&#xff1a;一个为智能体注入“蒙特卡洛”思想的工具箱最近在探索智能体&#xff08;Agent&#xff09;开发时&#xff0c;我一直在思考一个问题&#xff1a;如何让智能体的决策过程不那么“一根筋”&#xff1f;我们常见的基于规则或简单LLM调用的智能体&#xff…...

Mixtral-8x7B模型在消费级GPU上推理:混合量化与动态专家卸载实战

1. 项目概述与核心思路拆解最近在折腾大语言模型本地部署的朋友&#xff0c;估计都对Mixtral-8x7B这个“庞然大物”又爱又恨。爱的是它作为开源MoE&#xff08;专家混合&#xff09;模型的标杆&#xff0c;性能强悍&#xff1b;恨的是它那惊人的参数量&#xff08;约47B&#x…...