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

总结:前后端集合、数组类型数据交互底层原理,SpringBoot框架解析

总结:前后端集合、数组类型数据交互底层原理,SpringBoot框架解析

  • 一·前后端信息交互本质:
    • 1.两台电脑可以通过收发电磁波、控制网线电路开关等基础物理设施,就可以进行物理层面的电信号交互,电信号又可以通过各种传感设备转为对应的显示数据
    • 2.前后端通信一般默认使用的都是http协议,该协议本质就是一个文本协议。
  • 二·前后端一次请求应答的基本流程如下:概述
    • 1.客户端发送请求
    • 2.服务端接收请求
    • 3.服务端发送响应请求
    • 4.客户端接收响应请求
    • 综上所述:通过这四步,就完成了一次简单前后端http请求数据交互。
  • 三·前后端集合、数组类型数据交互底层原理:
    • 1.通过了解前后端http通信协议,可知前后端交互集合、数组等类型元素,本质就是将多个同类型字符串,通过特定字符间隔,然后一起传输给后端;后端再通过分隔符一个个解析出来,再封装到新创建的集合或者数组对象里面罢了。
    • 2.不同开发框架,实现集合、数组参数传递解析过程也不完全一样,甚至你自己都可以设计一套交互规则
  • 四·Springboot框架如何将http参数解析为集合或者数组类型参数:
    • 情况一:以URL路径拼接、application/x-www-form-urlencoded、multipart/form-data,三种格式提交数据时
      • 1.(优先级最高)当后端接口控制层使用数组或者集合类型接收参数时,http请求查询字符串中,若同时存在多个键值对的key相同,则该多个键值对就可以被Springboot框架解析为数组或者集合类型参数,键值对从左到右顺序,就是他们放入数组或者集合对象的顺序;若只有一个对应的键值对,则后端接口数组、集合对象里面只会存在一个元素
      • 2.(第二优先级)当后端接口使用数组或者集合类型接收参数时,http请求查询字符串中,若只存在一个对应键值对,且该键值对的值是逗号拼接时,Springboot框架会将该key对应的值以逗号拆分为数组或者集合对象里面的多个元素,从左到右顺序,就是他们放入数组或者集合对象的顺序
      • 3.键值对参数放在url后面或者body里面都一样,都会一起生效
      • 4.Springboot控制层数组、集合类型参数必须是存在构造方法的类,不能是抽象类或者接口类型,因为框架解析完参数后,需要自动调用构造方法创建对象然后存放数据
    • 情况二:以json格式提交数据:application/json
      • 1.当后端接口控制层使用@RequestBody注解标注参数对象,且对象属性有数组或者集合类型接收参数时,http请求体中的json格式数据,集合数组类型key,使用[]包含多个元素,map类型key,就使用{}包含多个键值对

一·前后端信息交互本质:

1.两台电脑可以通过收发电磁波、控制网线电路开关等基础物理设施,就可以进行物理层面的电信号交互,电信号又可以通过各种传感设备转为对应的显示数据

2.前后端通信一般默认使用的都是http协议,该协议本质就是一个文本协议。

二·前后端一次请求应答的基本流程如下:概述

1.客户端发送请求

客户端必须先将各种文件、对象数据等转为字符串,且将该字符串按照http协议格式进行封装(URL路径、请求头、请求体),然后通过网卡将http格式文本转为电磁波发送出去

2.服务端接收请求

服务端再通过网卡将电磁波转为http格式文本,然后再解析出URL路径、请求头、请求体,拿到数据后再进行对应的业务逻辑处理

3.服务端发送响应请求

服务端处理完业务逻辑之后,也需要将回传给前端的文件或者数据等转为文本字符串,再按照http格式进行封装(URL路径、请求头、请求体),然后通过网卡将http格式文本转为电磁波发送出去

4.客户端接收响应请求

客户端再通过网卡将电磁波转为http格式文本,然后再解析出URL路径、请求头、请求体,拿到数据后再进行对应的业务逻辑处理

综上所述:通过这四步,就完成了一次简单前后端http请求数据交互。

三·前后端集合、数组类型数据交互底层原理:

1.通过了解前后端http通信协议,可知前后端交互集合、数组等类型元素,本质就是将多个同类型字符串,通过特定字符间隔,然后一起传输给后端;后端再通过分隔符一个个解析出来,再封装到新创建的集合或者数组对象里面罢了。

2.不同开发框架,实现集合、数组参数传递解析过程也不完全一样,甚至你自己都可以设计一套交互规则

四·Springboot框架如何将http参数解析为集合或者数组类型参数:

情况一:以URL路径拼接、application/x-www-form-urlencoded、multipart/form-data,三种格式提交数据时

1.(优先级最高)当后端接口控制层使用数组或者集合类型接收参数时,http请求查询字符串中,若同时存在多个键值对的key相同,则该多个键值对就可以被Springboot框架解析为数组或者集合类型参数,键值对从左到右顺序,就是他们放入数组或者集合对象的顺序;若只有一个对应的键值对,则后端接口数组、集合对象里面只会存在一个元素

url?car=华为&car=比亚迪&car=法拉利

2.(第二优先级)当后端接口使用数组或者集合类型接收参数时,http请求查询字符串中,若只存在一个对应键值对,且该键值对的值是逗号拼接时,Springboot框架会将该key对应的值以逗号拆分为数组或者集合对象里面的多个元素,从左到右顺序,就是他们放入数组或者集合对象的顺序

url?car=极氪,吉利,五菱宏光

3.键值对参数放在url后面或者body里面都一样,都会一起生效

4.Springboot控制层数组、集合类型参数必须是存在构造方法的类,不能是抽象类或者接口类型,因为框架解析完参数后,需要自动调用构造方法创建对象然后存放数据

情况二:以json格式提交数据:application/json

1.当后端接口控制层使用@RequestBody注解标注参数对象,且对象属性有数组或者集合类型接收参数时,http请求体中的json格式数据,集合数组类型key,使用[]包含多个元素,map类型key,就使用{}包含多个键值对

相关文章:

总结:前后端集合、数组类型数据交互底层原理,SpringBoot框架解析

总结:前后端集合、数组类型数据交互底层原理,SpringBoot框架解析 一前后端信息交互本质:1.两台电脑可以通过收发电磁波、控制网线电路开关等基础物理设施,就可以进行物理层面的电信号交互,电信号又可以通过各种传感设备…...

2024蓝桥杯每日一题(前缀和)

一、第一题:壁画 解题思路:前缀和贪心枚举 仔细思考可以发现B值最大的情况是一段连续的长度为n/2上取整的序列的累加和 【Python程序代码】 import math T int(input()) for _ in range(1,1T):n int(input())s input()l math.ceil(len(s)/…...

2007-2022年上市公司迪博内部控制评价缺陷数量数据

2007-2022年上市公司迪博内部控制评价缺陷数量数据 1、时间:2007-2022年 2、范围:上市公司 3、指标:证券代码、证券简称、辖区、证监会行业、申万行业、是否存在财报内控重大缺陷、财报内控重大缺陷数量、是否存在财报内控重要缺陷、财报内…...

JAVA虚拟机实战篇之内存调优[4](内存溢出问题案例)

文章目录 版权声明修复问题内存溢出问题分类 分页查询文章接口的内存溢出问题背景解决思路问题根源解决思路 Mybatis导致的内存溢出问题背景问题根源解决思路 导出大文件内存溢出问题背景问题根源解决思路 ThreadLocal占用大量内存问题背景问题根源解决思路 文章内容审核接口的…...

qt自定义时间选择控件窗口

效果如图&#xff1a; 布局如图&#xff1a; 参考代码&#xff1a; //DateTimeSelectWidget #ifndef DATETIMESELECTWIDGET_H #define DATETIMESELECTWIDGET_H#include <QWidget> #include <QDateTime>namespace Ui { class DateTimeSelectWidget; }class DateTim…...

如何不解压直接读取gzip文件里面的文件

要在服务器上不解压缩的情况下读取gzip文件中的文件内容&#xff0c;您可以使用类似于zlib模块的库&#xff0c;这些库允许您在内存中对gzip数据进行操作而无需解压缩到磁盘上的文件。 在Python中&#xff0c;您可以使用gzip模块来实现这一目的。以下是一个示例代码&#xff0…...

python 截取字符串string.split

目录 作用语法只要第一个值获得第3个值遍历 作用 根据某个符号对数据进行截取 从而获得自己想要的内容 语法 使用’string.split’ 方法 对字符串’123/abc/BPYC’ 以 ‘/’ 进行截取 string "123/abc/BPYC" substring string.split("/") print(subs…...

SpringBoot+Vue实现el-table表头筛选排序(附源码)

&#x1f468;‍&#x1f4bb;作者简介&#xff1a;在笑大学牲 &#x1f39f;️个人主页&#xff1a;无所谓^_^ ps&#xff1a;点赞是免费的&#xff0c;却可以让写博客的作者开心好几天&#x1f60e; 前言 后台系统对table组件的需求是最常见的&#xff0c;不过element-ui的el…...

Linux学习之线程

目录 线程概念 1.什么是线程&#xff1f; 2.线程的优缺点 3.线程异常 4.线程用途 线程操作 1.如何给线程传参 2.线程终止 3.获取返回值 4.分离状态 5.退出线程 线程的用户级地址空间&#xff1a; 线程的局部存储 线程的同步与互斥 互斥量mutex 数据不一致的主要过…...

【JavaEE初阶】 JVM类加载简介

文章目录 &#x1f343;前言&#x1f332;类加载过程&#x1f6a9;加载&#x1f6a9;验证&#x1f6a9;准备&#x1f6a9;解析&#x1f6a9;初始化 &#x1f384;双亲委派模型&#x1f6a9;什么是双亲委派模型&#xff1f;&#x1f6a9;双亲委派模型的优点 ⭕总结 &#x1f343…...

.NET Core依赖注入(IoC)不使用构造函数实现注入

在.NET Core中&#xff0c;依赖注入&#xff08;IoC&#xff09;通常是通过构造函数注入来实现的&#xff0c;这是推荐的方式&#xff0c;因为它使得依赖关系更加明确和可测试。但是&#xff0c;如果你不想或不能使用构造函数注入&#xff0c;你可以考虑使用方法注入&#xff0…...

WinSCP下载安装并结合内网穿透实现固定公网TCP地址访问本地服务器

文章目录 1. 简介2. 软件下载安装&#xff1a;3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 ​ Winscp是一个支持SSH(Secure SHell)的可视化SCP(Secure Copy)文件传输软件&#xff0c;它的主要功能是在本地与远程计…...

内联函数|auto关键字|范围for的语法|指针空值

文章目录 一、内联函数1.1概念1.2特性 二、auto关键字2.2类型别名思考2.3auto简介2.4auto使用细则2.4 auto不能推导的场景 三、基于范围的for循环(C11)3.1 范围for的语法 四、指针空值nullptr(C11)4.1 C98中的指针空值 所属专栏:C初阶 一、内联函数 1.1概念 以inline修饰的函…...

家用洗地机哪个型号好用?介绍几个值得考虑的品牌

作为家里的主要清洁工&#xff0c;我一直以来都是负责家里的清洁工作。我经常使用吸尘器和扫地机器人来轮流清洁&#xff0c;虽然效果还不错&#xff0c;但是这种方式太费时间和精力了。特别是在脸上厨房里做完饭和孩子吃完饭后留下的残渣时&#xff0c;我总是需要用传统的拖多…...

力扣-数组题

1. 两数之和 找出map中是否有target-nums[i]&#xff0c; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> hash;for(int i 0 ;i < nums.size(); i){if(hash.find(target - nums[i]) ! hash…...

将List转换为数组或者将数组转换为List,如果改变了原始值,转换后的数据会发生改变吗?

将List转换为数组或将数组转换为List涉及到数据结构的变化。在Java中&#xff0c;这两种转换是否会影响原始数据取决于转换的方式和使用的数据结构。下面分别解释这两种情况&#xff1a; 将List转换为数组 当你将一个List转换为数组时&#xff0c;通常通过List的toArray()方法…...

七彩虹@电脑cpu频率上不去问题@控制中心性能模式cpu频率上不去@代理服务器超时@账户同步设置失败

文章目录 windows电脑cpu频率上不去新电脑的系统时间问题系统时间不准造成的具体问题举例代理超时vscode同步请求失败自动校准时间 windows电脑cpu频率上不去 问题描述,标压处理器的笔记本,cpu频率上不去 如果cpu没问题的话,就应该是系统限制了功耗导致的有的笔记本有控制中心…...

抖音怎么开店?抖音小店开店流程讲解,可收藏!

大家好&#xff0c;我是电商糖果 想在抖音上开一家小店&#xff0c;卖点东西&#xff0c;赚点儿辛苦钱。 如何正确的开通抖音小店呢&#xff1f; 这篇文章就给大家详细的讲解一下&#xff0c;帮大家规避掉一些百分之九十九的商家都会踩的坑。 近期开店的朋友&#xff0c;这…...

leetcode 热题 100_轮转数组

题解一&#xff1a; 新数组存储&#xff1a;另外用一个数组存储移动后的结果&#xff0c;再复制回原数组。 class Solution {public void rotate(int[] nums, int k) {int[] result new int[nums.length];for (int i 0; i < nums.length; i) {result[(i k) % nums.lengt…...

华为设备小型园区网方案(有线+无线+防火墙)

&#xff08;一&#xff09;配置有线部分 1.配置LSW2 &#xff08;1&#xff09;创建相关vlan [LSW2]vlan batch 10 3000 &#xff08;2&#xff09;配置连接LSW1的Eth-Trunk1&#xff0c;透传VLAN 10 3000 [LSW2]int Eth-Trunk 1 [LSW2-Eth-Trunk1]port link-type trunk [LSW2…...

告别‘Hello World’就卡住:保姆级Android Studio安装与环境变量配置(Win/Mac通用)

告别‘Hello World’就卡住&#xff1a;保姆级Android Studio安装与环境变量配置&#xff08;Win/Mac通用&#xff09; 第一次打开Android Studio时&#xff0c;满心欢喜准备大展拳脚&#xff0c;却在"Hello World"之前就被各种报错拦住了去路&#xff1f;你不是一个…...

Jmeter 安装教程:一看就会

随着互联网的不断发展&#xff0c;网站和应用程序的性能测试 变得越来越重要。Apache JMeter 是一款广泛使用的性能测试工具&#xff0c;它强大且使用广泛&#xff0c;适用于各种性能测试需求。不论你是刚刚接触性能测试的新手&#xff0c;还是一位有经验的测试工程师&#xff…...

如何让AMD/Intel显卡免费获得CUDA加速:ZLUDA兼容层完整指南

如何让AMD/Intel显卡免费获得CUDA加速&#xff1a;ZLUDA兼容层完整指南 【免费下载链接】ZLUDA CUDA on non-NVIDIA GPUs 项目地址: https://gitcode.com/GitHub_Trending/zl/ZLUDA 你是否曾因没有昂贵的NVIDIA显卡而无法运行深度学习项目&#xff1f;当同事们在讨论CUD…...

如何高效使用Splatoon插件:全面指南提升FFXIV游戏体验

如何高效使用Splatoon插件&#xff1a;全面指南提升FFXIV游戏体验 【免费下载链接】Splatoon An accessibility tool to assist in gameplay and compensate for human imperfections. 项目地址: https://gitcode.com/gh_mirrors/spl/Splatoon 在《最终幻想14》的高难度…...

MATLAB新手避坑指南:datetime函数解析中文日期和带‘T’、‘Z’的ISO 8601格式

MATLAB datetime函数实战&#xff1a;解析中文日期与ISO 8601格式的深度指南 当你第一次从API接口拿到2023-10-01T14:30:00Z这样的时间戳&#xff0c;或是需要处理中文报表中的2023年十月一日这类日期时&#xff0c;MATLAB的datetime函数可能会让你感到困惑。本文将带你深入理解…...

EC600S连接阿里云物联网平台:从AT指令调试到MQTT协议全流程避坑指南

EC600S连接阿里云物联网平台&#xff1a;从AT指令调试到MQTT协议全流程避坑指南 在物联网设备开发中&#xff0c;4G模块与云平台的稳定连接是数据交互的基础。EC600S作为一款高性价比的4G通信模块&#xff0c;广泛应用于各类物联网场景。本文将深入解析EC600S通过AT指令与阿里云…...

FDA 21 CFR Part 11合规验证全链路,Docker镜像签名、不可变日志、审计追踪三合一实战,仅剩最后23家机构未覆盖

第一章&#xff1a;FDA 21 CFR Part 11合规性本质与Docker落地挑战FDA 21 CFR Part 11 的核心在于确保电子记录和电子签名的可靠性、完整性与可追溯性&#xff0c;其合规性并非仅依赖技术工具&#xff0c;而是要求组织建立涵盖人员、流程与系统三要素的受控环境。在容器化场景下…...

Noto字体技术架构:构建全球化多语言字体系统的企业级解决方案

Noto字体技术架构&#xff1a;构建全球化多语言字体系统的企业级解决方案 【免费下载链接】noto-fonts Noto fonts, except for CJK and emoji 项目地址: https://gitcode.com/gh_mirrors/no/noto-fonts Noto字体是Google推出的开源多语言字体项目&#xff0c;旨在解决…...

Mac用户必备:12306ForMac抢票助手完整使用指南

Mac用户必备&#xff1a;12306ForMac抢票助手完整使用指南 【免费下载链接】12306ForMac An unofficial 12306 Client for Mac 项目地址: https://gitcode.com/gh_mirrors/12/12306ForMac 你是否曾为在Mac上抢购火车票而烦恼&#xff1f;传统网页版12306在高峰期经常卡顿…...

别再手推机器人动力学方程了!用Python的Sympybotics库5分钟自动生成C代码

用Sympybotics实现机器人动力学方程自动生成&#xff1a;从符号推导到嵌入式C代码的完整实践 在机器人控制算法开发中&#xff0c;动力学方程的推导一直是工程师们的噩梦。传统手工推导不仅耗时费力&#xff0c;还容易出错。想象一下&#xff0c;当你花费数周时间推导六自由度机…...