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 + '\'' +'}';}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/10201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国1KM年相对湿度数据集1981-2020

大气相对湿度&#xff08;RH&#xff09;是气象/气候监测和研究的关键因素。然而&#xff0c;相对湿度在气候变化研究中的应用并不是很普遍&#xff0c;部分原因是相对湿度观测系列容易由于观测系统中的非气候变化而产生不均匀偏差。 该数据集是中国1km分辨率年相对湿度数据&am…

【MsSQL】数据库基础 库的基本操作

目录 一&#xff0c;数据库基础 1&#xff0c;什么是数据库 2&#xff0c;主流的数据库 3&#xff0c;连接服务器 4&#xff0c;服务器&#xff0c;数据库&#xff0c;表关系 5&#xff0c;使用案例 二&#xff0c;库的操作 1&#xff0c;创建数据库 2&#xff0c;创建…

华为配置Ethernet over GRE实现AC与无线网关之间的二层互通

华为配置Ethernet over GRE实现AC与无线网关之间的二层互通 组网图形 图1 通过Ethernet over GRE实现AC与无线网关之间的二层互通的组网图 组网需求数据规划配置思路操作步骤配置文件 组网需求 如图1所示&#xff0c;某企业通过无线网络为用户提供上网服务&#xff0c;其中A…

探索静态住宅代理IP:网络安全的隐形守护者

在当今这个数字化高速发展的时代&#xff0c;网络安全问题愈发凸显其重要性。无论是企业级的网络运营&#xff0c;还是个人用户的网络活动&#xff0c;都需要一个安全、稳定的网络环境。而在这个环境中&#xff0c;静态住宅代理IP以其独特的优势&#xff0c;逐渐成为了网络安全…

Java——类与对象

目录 一、面向对象的初步认识 1.1 什么是面向对象 1.2 面向对象与面向过程 二、类的定义与使用 2.1 简单认识类 2.2 类的定义格式 三、类的实例化 3.1 什么是实例化 3.2 类和对象的说明 四、this引用 4.1 为什么要有this引用 4.2 什么是this引用 ​编辑 4.3 this引用…

鸿蒙OpenHarmony:【常见编译问题和解决方法】

常见问题 常见编译问题和解决方法 鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 提示“usr/sbin/ninja: invalid option -- w” 现象描述&#xff1a; 编译失败&#xff0c;提示“usr/sbin/ninja: invalid…

设备二维码怎么生成?三分钟即可搞定

在现代工业生产中&#xff0c;设备的维护和巡检是保障生产连续性和安全性的重要环节。随着技术的发展&#xff0c;二维码技术因其便捷性和高效性被广泛应用于设备巡检中。 给每个设备配备一个二维码&#xff0c;一线人员用手机扫一扫&#xff0c;几秒钟就能上报巡检结果&#…

Measurement and Analysis of Large-Scale Network File System Workloads——论文泛读

ATC 2008 Paper 分布式元数据论文阅读笔记整理 问题 网络文件系统在当今的数据存储中发挥着越来越重要的作用。使用网络文件系统可以降低管理成本&#xff0c;从多个位置可靠地访问的数据。这些系统的设计通常以对文件系统工作负载和用户行为的理解为指导[12&#xff0c;19&a…

docker 容器无法直接读取宿主机文件

最近一个需求, 要在后端直接使用代码直接生成 pdf 文档, 由于使用的 apache 的工具包, 该工具包无法直接解析中文字体, 需要导入外部 中文插件包, 相关代码如下: PDPage page new PDPage(PDRectangle.A4);document.addPage(page);PDFont fontFile PDType0Font.load(document…

瑞友天翼应用虚拟化系统SQL注入漏洞

文章目录 漏洞描述漏洞原理影响版本漏洞复现防御方法 漏洞描述 瑞友天翼应用虚拟化系统是基于服务器计算架构的应用虚拟化平台&#xff0c;它将用户各种应用软件集中部署到瑞友天翼服务集群&#xff0c;客户端通过 WEB 即可访问经服务器上授权的应用软件&#xff0c;实现集中应…

Python中的多进程、多线程、协程

Python中的多线程、多进程、协程 一、概述 1. 多线程Thread &#xff08;threading&#xff09;&#xff1a; 优点&#xff1a;同一个进程中可以启动多个线程&#xff0c;充分利用IO时&#xff0c;cpu进行等待的时间缺点&#xff1a;相对于进程&#xff0c;多线程只能并发执…

深入理解JavaScript数组

深入理解JavaScript数组&#xff1a;玩转数据结构 前言数组的基础知识什么是数组如何创建一个数组如何访问数组元素 数组的常用操作数组的长度 length更改数组项数组的遍历数组类型的检测数组的添加和删除元素&#xff08;头尾操作 push()、pop()、unshift()、shift()&#xff…

enable_shared_from_this使用笔记

解决了&#xff1a; 不能通过原指针增加引用次数的问题 &#xff0c;通过weak_ptr实现。 class MyCar:public std::enable_shared_from_this<MyCar> { public:~MyCar() { std::cout << "free ~Mycar()" << std::endl; } };int main() { MyCar* _…

centos7下fastdfs分布式部署

需要先在159及120服务器上安装fastdfs服务 可参考&#xff1a;centos7部署FastDFS服务_centos fastdfs 增加到服务中-CSDN博客 1、整体架构&#xff0c;使用3个服务器节点&#xff0c;其中两台为跟踪器节点及存储节点&#xff0c;一台服务器搭建nginx做统一入口进行负载均衡 …

K8S安装并搭建集群

1. 先给每台机器安装docker环境 卸载旧的docker yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 配置docker的yum库 yum install -y yum-utilsyum-config-manager --a…

JavaEE之线程(3)_线程的开始、中断、等待、休眠线程、线程的状态

前言 在本栏的上一节&#xff08;https://blog.csdn.net/2301_80653026/article/details/138500558&#xff09;&#xff0c;我们重点讲解了五种不同的创建线程的方式&#xff0c;我们还介绍了Tread类的常见构造方法和常见属性&#xff0c;在这一节中我们将会继续介绍Tread类。…

简单的Python HTML 输出

1、问题背景 一名初学者在尝试将 Python 脚本输出到网页上时遇到了一些问题。他当前使用 Python 和 HTML 进行开发&#xff0c;并且遇到了以下问题&#xff1a; 担心自己的代码过于复杂&#xff0c;尤其是 WebOutput() 函数。希望通过 JavaScript 使用 HTML 模板文件更新数据。…

【PG数据库】PostgreSQL 日志归档详细操作流程

1.1 日志归档的目的 pg数据库日志归档是将PostgreSQL数据库的日志文件进行归档的过程。 归档的主要目的是为了保留历史数据&#xff0c;确保数据的一致性和完整性&#xff0c;同时为数据恢复提供必要的支持。 pg数据库日志归档的目的包括&#xff1a; 1.数据恢复&#xff1…

Tomcat中服务启动失败,如何查看启动失败日志?

1. 查看 localhost.log 这个日志文件通常包含有关特定 web 应用的详细错误信息。运行以下命令查看 localhost.log 中的错误&#xff1a; sudo tail -n 100 /opt/tomcat/latest/logs/localhost.YYYY-MM-DD.log请替换 YYYY-MM-DD 为当前日期&#xff0c;或选择最近的日志文件日…

【打工日常】云原生之搭建一款轻量级的开源Markdown笔记工具

一、flatnotes介绍 1.flatnotes简介 一个自托管的&#xff0c;无数据库的笔记网络应用程序&#xff0c;利用平面文件夹的markdown文件进行存储。 2.项目特点 A.干净简单的用户界面B.响应式移动端界面C.原生/所见即所得Markdown编辑模式D.高级搜索功能E.笔记“标签”功能F.…