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 是一个用于一次性锁定两个或多个互斥…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...

宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...