SpringBootWeb 篇-深入了解请求响应(服务端接收不同类型的请求参数的方式)
🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍


文章目录
1.0 请求响应概述
1.1 简单参数
1.2 实体参数
2.3 数组集合参数
2.4 日期参数
2.5 json 参数
2.6 路径参数
3.0 完整代码
1.0 请求响应概述
当客户端发送不同的请求参数到服务端,服务端就需要进行不同的方法方式来接收请求参数。一般的请求参数的类型包括:简单参数、实体参数、数组集合参数、日期参数、json 参数、路径参数。
1.1 简单参数
客户端无论通过 get 或者是 post 方式来发送请求,对应发送简单请求参数来说,是通过键值对的方式来发送到服务端。
1)方法一:服务端可以用到 HttpServletRequest 类对象来接收简单参数请求,再通过对象名.getParam("请求参数名") 方法来获取值。
代码演示:
//接收简单参数方法一:使用 HttpServletRequest 类来获取客户端发送过来的请求参数//通过对象名.get//这里注解为:请求路径@RequestMapping("/simpleParam")public String simpleParam(HttpServletRequest request){String name = request.getParameter("name");String age = request.getParameter("age");发送的请求参数:
通过 GET 方式来发送请求,请求参数有两个 name 和 age,send 发送给服务端后,服务端给客户端返回 "OK" 。
服务器输出的结果:
服务端成功接收请求参数且返回数据到客户端。
2)方法二:可以直接用一一对应的方式来接收请求参数,必须要注意保持请求的参数名与服务端需要接收的变量名保持一致。
代码演示:
//接受简单参数方法二:直接用对应请求参数的变量名称来接收,一一对应的方式@RequestMapping("/simpleParam1")//需要注意的是,参数名称与客户端发送过来的名称要一一对应,且接收后的数据会自动识别转换类型public String simpleParam1(String name,Integer age){System.out.println(name + " : " + age);return "OK";}发送的请求:
这次发送的请求方式为 post 方式,请求参数在请求体中。
服务器输出的结果:
3)对方法 2 的升级,万一有需求:接收请求参数的变量名与请求参数不一致,那么可以通过变量名与请求参数进行绑定的形式。
代码演示:
//如果方法中的参数名与请求参数名不一致,就需要进行绑定参数@RequestMapping("/simpleParam2")public String simpleParam2(@RequestParam(name = "name" ,required = false) String userName,Integer age){System.out.println(userName + " : " + age);return "OK";}发送的请求:
通过用注解 RequestParam 来绑定 name 与 userName ,也可以理解为将 name 映射到 userName 。注解中还有一个参数,该参数的作用,将 required 设置 false 时,不要求请求参数 name 一定有,但是 requider 默认为 true ,必须要求请求参数 name 必须存在。
服务端输出的结果:
1.2 实体参数
可以用类对象(实体)的方式来接收请求参数,类中的成员变量必须保持跟请求参数名一致。
代码演示:
public class User {private String name;private String age;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public User() {}public User(String name, String age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age='" + age + '\'' +'}';} }//接受实体参数方法三:当客户端发送过来的数据,服务端可以用对象来接受,对象中的变量要跟传输过来的参数名要保持一致@RequestMapping("/complexParam")//用一个类对象来接收public String complexParam(User user){//这样 user 就可以接收到请求参数了System.out.println(user);return "OK";}发送的请求:
服务端输出的结果:
2.3 数组集合参数
当客户端发送的请求参数中有多个参数名是一致的且值不相同时,服务端就可以用到数组来接收这些相同参数的值了,接收参数值的数组名一定要跟该多个参数名保持一致。
代码演示:
//接收数组参数方法:当客户端发送的参数名都是一样且值不一样的时候,就可以用到数组来接收了//需要注意的是,请求参数名需要跟接收的数组名保持一致@RequestMapping("/arrayParam")public String arrayParam(String[] hobby){System.out.println(Arrays.toString(hobby));return "OK";}发送的请求:
服务端输出的结果:
服务端成功用数组接收请求参数所应对的值。
除了数组这个容器之外,还可以用集合容器来接收请求参数,通过注解 @RequestParam 来绑定该集合来接收请求参数。
代码演示:
//用集合来接收请求参数@RequestMapping("/listParam")//这里的注解:映射,默认用数组接收,若改变用集合来接收请求参数,就需要进行关系上的绑定//一定要注意,请求参数的名称 hobby 一定要与以下方法集合名称保持一致public String listParam(@RequestParam List<String> hobby){System.out.println(hobby);return "OK";}发送的请求:
服务端输出的结果:
2.4 日期参数
若客户端发送给服务端的请求参数是日期格式,服务端可以用 LocalDateTime 类型的对象来接收该日期格式的请求参数,由于日期格式是不确定的,所以需要自定义日期格式,通过 @DateTimeFormat 注解中的 pattern 参数来定义日期格式。
代码演示:
//当客户端的请求参数是日期的格式,那么就需要用到LocalDateTime类型来接收@RequestMapping("/dateTimeParam")//这里的注释:规定日期格式//需要注意,方法中的参数名必须要跟请求参数的名保持一致public String dateTimeParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime localDateTime){System.out.println(localDateTime);return "OK";}发送的请求:
需要注意的是:05 不能只写 5 ,会因为格式不对,导致报错,报错码为:400,客户端格式错误,语法错误。
服务端输出的结果:
2.5 json 参数
客户端用 post 方式来发送请求,请求的参数是 json 格式的参数,在请求体中。简单理解为,由于 json 格式与类的格式很像,所以用类对象来接收 json 参数,通过注解 @RequestBody 将类对象与请求 json 格式的参数进行绑定。
代码演示:
//当客户端的请求参数是一个 json 格式,需要进行参数绑定//json 格式的数据可以简单理解认为就是用类对象来接收的,因为格式很相识@RequestMapping("/jsonParam")public String jsonParam(@RequestBody User user){System.out.println(user);return "OK";}发送的请求:
服务端输出的结果:
这样服务端就完成了对客户端发送过来的 json 格式的请求参数接收完毕,且成功给客户端响应 "OK" 。
2.6 路径参数
当客户端发送的路径中就含有参数时,服务端该如何接收呢?
使用 Spring 框架的 Java 应用程序,可以使用 @PathVariable 注解来接收客户端发送的带有参数的路径。
在请求路径上的参数需要用 {} 进行封装。
代码演示:
//当客户端的请求参数就是路径参数@RequestMapping("/Path/{id}/{name}")public String pathParam(@PathVariable String id,@PathVariable String name){System.out.println(id + " : " + name);return "OK";}发送的请求:
服务端输出的结果:
3.0 完整代码
demo1 类:
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletRequest; import java.time.LocalDateTime; import java.util.Arrays; import java.util.List;@RestController public class demo1 {//接收简单参数方法一:使用 HttpServletRequest 类来获取客户端发送过来的请求参数//通过对象名.get//这里注解为:请求路径@RequestMapping("/simpleParam")public String simpleParam(HttpServletRequest request){String name = request.getParameter("name");String age = request.getParameter("age");//类型转化:int age1 = Integer.parseInt(age);System.out.println(name + " : " + age1);//给客户端返回return "OK";}//接受简单参数方法二:直接用对应请求参数的变量名称来接收,一一对应的方式@RequestMapping("/simpleParam1")//需要注意的是,参数名称与客户端发送过来的名称要一一对应,且接收后的数据会自动识别转换类型public String simpleParam1(String name,Integer age){System.out.println(name + " : " + age);return "OK";}//如果方法中的参数名与请求参数名不一致,就需要进行绑定参数@RequestMapping("/simpleParam2")public String simpleParam2(@RequestParam(name = "name" ,required = false) String userName,Integer age){System.out.println(userName + " : " + age);return "OK";}//接受实体参数方法三:当客户端发送过来的数据,服务端可以用对象来接受,对象中的变量要跟传输过来的参数名要保持一致@RequestMapping("/complexParam")//用一个类对象来接收public String complexParam(User user){//这样 user 就可以接收到请求参数了System.out.println(user);return "OK";}//接收数组参数方法:当客户端发送的参数名都是一样且值不一样的时候,就可以用到数组来接收了//需要注意的是,请求参数名需要跟接收的数组名保持一致@RequestMapping("/arrayParam")public String arrayParam(String[] hobby){System.out.println(Arrays.toString(hobby));return "OK";}//用集合来接收请求参数@RequestMapping("/listParam")//这里的注解:映射,默认用数组接收,若改变用集合来接收请求参数,就需要进行关系上的绑定//一定要注意,请求参数的名称 hobby 一定要与以下方法集合名称保持一致public String listParam(@RequestParam List<String> hobby){System.out.println(hobby);return "OK";}//当客户端的请求参数是日期的格式,那么就需要用到LocalDateTime类型来接收@RequestMapping("/dateTimeParam")//这里的注释:规定日期格式//需要注意,方法中的参数名必须要跟请求参数的名保持一致public String dateTimeParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime localDateTime){System.out.println(localDateTime);return "OK";}//当客户端的请求参数是一个 json 格式,需要进行参数绑定//json 格式的数据可以简单理解认为就是用类对象来接收的,因为格式很相识@RequestMapping("/jsonParam")public String jsonParam(@RequestBody User user){System.out.println(user);return "OK";}//当客户端的请求参数就是路径参数@RequestMapping("/Path/{id}/{name}")public String pathParam(@PathVariable String id,@PathVariable String name){System.out.println(id + " : " + name);return "OK";}}
User 类:
public class User {private String name;private String age;private Hobby hobby;public User() {}public User(String name, String age, Hobby hobby) {this.name = name;this.age = age;this.hobby = hobby;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public Hobby getHobby() {return hobby;}public void setHobby(Hobby hobby) {this.hobby = hobby;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age='" + age + '\'' +", hobby=" + hobby +'}';} }
Hobby 类:
public class Hobby {private String name1;private String name2;public Hobby() {}public Hobby(String name1, String name2) {this.name1 = name1;this.name2 = name2;}public String getName1() {return name1;}public void setName1(String name1) {this.name1 = name1;}public String getName2() {return name2;}public void setName2(String name2) {this.name2 = name2;}@Overridepublic String toString() {return "Hobby{" +"name1='" + name1 + '\'' +", name2='" + name2 + '\'' +'}';} }

相关文章:
SpringBootWeb 篇-深入了解请求响应(服务端接收不同类型的请求参数的方式)
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 请求响应概述 1.1 简单参数 1.2 实体参数 2.3 数组集合参数 2.4 日期参数 2.5 json 参数 2.6 路径参数 3.0 完整代码 1.0 请求响应概述 当客户端发送不同的请求参…...
实验十 智能手机互联网程序设计(微信程序方向)实验报告
实验目的和要求 完成以下页面设计。 二、实验步骤与结果(给出对应的代码或运行结果截图) Wxml <view class"container"> <view class"header"> <view class"logo"…...
Python图形复刻——绘制母亲节花束
各位小伙伴,好久不见,今天学习用Python绘制花束。 有一种爱,不求回报,有一种情,无私奉献,这就是母爱。祝天下妈妈节日快乐,幸福永远! 图形展示: 代码展示: …...
【算法优选】 动态规划之子数组、子串系列——壹
文章目录 🎋前言🎋最大子数组和🚩题目描述🚩算法思路🚩代码实现 🌴环形子数组的最大和🚩题目描述🚩算法思路:🚩代码实现 🌲乘积最大子数组&#x…...
PXE+Kickstart无人值守安装安装Centos7.9
文章目录 一、什么是PXE1、简介2、工作模式3、工作流程 二、什么是Kickstart1、简介2、触发方式 三、无人值守安装系统工作流程四、实验部署1、环境准备2、服务端:关闭防火墙和selinux3、添加一张仅主机的网卡4、配置仅主机的网卡4.1、修改网络连接名4.2、配IP地址4…...
C语言实现通讯录,包括增删改查以及动态开辟内存,写入文件等功能
文章目录 前言一、注意二、源码1. test.c源文件2. contact.h头文件3. contact.c源文件 总结 前言 C语言实现通讯录,包括增删改查以及动态开辟内存,写入文件等功能 一、注意 在通讯录菜单栏使用枚举定义PeoInfo类型时,每个结构体类型的成员…...
flowable多对并发网关跳转的分析
更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…...
【嵌入式——QT】QT集成Ymodem协议使用UDP进行传输
【嵌入式——QT】QT集成Ymodem协议使用UDP进行传输 Ymodem协议帧的数据格式帧头包号校验 通讯过程握手信号起始帧数据帧结束帧代码块 Ymodem命令 QT实现YmodemFileTransmit.hYmodemFileTransmit.cppBootLoader.hBootLoader.cppYmodem协议源码 Ymodem协议 帧的数据格式 帧头、…...
python笔记(17)输入输出
一、标准输入与输出简介 Python通过内置的sys模块管理标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。但对大多数简单应用而言,直接使用内置函数就足够了。 二、输入:inpu…...
408数据结构总结复习笔记一:线性表
408数据结构总结复习笔记一:线性表 从现在开始慢慢更新我的考研复习笔记系列吧~ PS:主要是我自己个人复习过程中觉得重点的点,大家仅供参考哈~ 上岸!!!大家一起加油! 顺序表和链表的比较 顺序表链表存取…...
Docker——目录迁移
我们在生产环境中安装Docker时,默认的安装目录是/var/lib/docker,而通常情况下,规划给系统盘的目录一般为50G,该目录是比较小的,一旦容器过多或容器日志过多,就可能出现Docker无法运行的情况,所…...
SpringAMQP-消息转换器
这边发送消息接收消息默认是jdk的序列化方式,发送到服务器是以字节码的形式,我们看不懂也很占内存,所以我们要手动设置一下 我这边设置成json的序列化方式,注意发送方和接收方的序列化方式要保持一致 不然回报错。 引入依赖&#…...
轻松拿下指针(5)
文章目录 一、回调函数是什么二、qsort使用举例三、qsort函数的模拟实现 一、回调函数是什么 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时&#x…...
Nginx反向代理配置
一、介绍 Nginx 的反向代理功能在现代网络架构中扮演着至关重要的角色。首先,它充当了客户端与后端服务器之间的中介。当客户端发送请求时,这些请求先到达 Nginx 服务器,Nginx 会根据预先设定的规则和配置,将请求准确地转发到相应…...
突破编程界限:探索AI编程新境界
文章目录 一、AI编程助手1.1 Baidu Comate智能代码助手1.2 阿里云 通义灵码 二、场景需求三、体验步骤3.1 官网下载3.2 手动下载 四、试用感受4.1 提示4.2 注释生成代码4.3 代码生成4.4 选中生成注释4.5 查看变更&新建文件4.6 调优建议4.7 插件使用 五、结尾推荐 一、AI编程…...
C语言(指针)2
Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注收藏,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记&#x…...
go学习笔记
1基础搭建 1.1,安装vscode https://code.visualstudio.com/download 64位 1.2,Windows 下搭建Go 开发环境-安装和配置 SDK SDK 的全称(Software Development Kit 软件开发工具包) Go 语言的官网为:golang.org , 因为各种原因,可…...
MacApp自动化测试之Automator初体验
今天我们继续讲Automator的使用。 初体验 启动Automator程序,选择【工作流程】类型。从资源库区域依次将获取指定的URL、从网页中获得文本、新建文本文件三个操作拖进工作流创建区域。 然后修改内容,将获取指定的URL操作中的URL替换成https://www.cnb…...
Vue学习v-html
Vue学习v-html 一、前言1、基本用法2、注意事项 二、总结 一、前言 学习 Vue.js 中的 v-html 指令意味着你想要在你的应用程序中动态地渲染 HTML。这个指令允许你将数据中包含的 HTML 代码直接插入到你的模板中,而不是将其作为纯文本处理。虽然这个功能非常强大&am…...
C++并发:锁
一、前言 C中的锁和同步原语的多样化选择使得程序员可以根据具体的线程和数据保护需求来选择最合适的工具。这些工具的正确使用可以大大提高程序的稳定性和性能,本文讨论了部分锁。 二、std::lock 在C中,std::lock 是一个用于一次性锁定两个或多个互斥…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...


















