前端发送请求和后端springboot接受参数
0.xhr、 ajax、axios、promise和async/await 和http基本方法
xhr、 ajax、axios、promise和async/await都是异步编程和网络请求相关的概念和技术!
-
xhr:XMLHttpRequest是浏览器提供的js对象(API),用于请求服务器资源。
- 在没有xhr的年代,向服务器请求资源时,会返回整个完整的HTML页面,浏览器引擎在渲染新的HTML页面时会导致屏幕闪烁。
- 如果你用java awt之流手搓过游戏肯定能深刻明白,游戏绘制的闪烁问题使用「双缓冲(存)技术」方案解决
- 而浏览器上提出方案就是只渲染新的必要的数据而不是整个页面。惟一需要获得整个新 HTML 页面的时候就是希望用户看到新页面的时候。XHR就是这样的技术
-
ajax:Asynchronous JavaScript and XML ,ajax是基于 原生xhr(或fetch)在网页中进行异步通信的技术概念。不刷新整个页面的情况下就可以更新页面内容。
- ajax 是一种通用的异步通信概念而不是具体的API or lib。以前是用xhr实现,现代也可以用fetch这个浏览器提供API来实现了。例如jquery包含的ajax部分就是封装了原生xhr实现的
-
Promise:既是一种解决异步的技术概念,也是在es6提出的处理异步操作的方案JS原生对象(技术实现),通过链式调用来解决ajax的回调地狱。
-
axios:一个基于 Promise 的 HTTP 客户端(lib),用于在浏览器和 Node.js 环境中发起 HTTP 请求。能更简单地执行 HTTP 请求
-
async/await:async/await 是基于 Promise 的语法糖
总结来说,axios 和 ajax 都是用于进行网络请求的技术,但 axios 是一个独立的库,而 ajax 是一种通用的异步通信概念。
Promise 是一种用于处理异步操作的基础机制,它可以被用于任何需要处理异步的场景,包括网络请求。在es6时引入为JS的原生对象进行概念的落地实现
下面是HTTP 常用方法介绍
- GET:发送请求,要求服务器返回某个资源。即请求资源
- PUT: 与GET相反,PUT会向服务器写入(更新or创建)信息(文档)
- POST:向服务器发送数据。常见的例如发送表单信息
- DELETE:请求服务器删除指定URL的资源
最容易混淆的是put和post:
- post用于向服务器发数据
- put用户向服务器的资源(如文件)中存储数据
在RESTful接口中,以资源为中心,将操作转换为对资源的 CRUD(Create、Read、Update、Delete)操作,使用 HTTP 方法来表示操作类型。
例如使用 GET 获取资源,POST 创建资源,PUT 更新资源,DELETE 删除资源。
写Restful接口分不清post和put话有个小技巧:
前端请求结果会生成额外的唯一标识符(如数据库表的主键),用post
前端请求需要提前知道唯一标识符,PUT(当然,put不是只能更新,也可以创建,不规范而已语义混淆,而且put是幂等的按照HTTP 规范)
1.前端发送请求
vue项目中,现在一般都是单独创建axios实例然后默认导出
import axios from ‘axios’
const instance=axios.create({……})
export default instance
具体的接口可以这样导出
import request from '@/utils/request'
export function getSolution(params) {return request({url: '/api/XXX/data',method: 'get',params})
具体调用时用 Promise 的链式操作处理
import * as xxapi from '@/api/datax-job-project'xxapi .getListByUser({ 'username': username }).then(response => {this.jobProjectList = response.content.data})
1.2 发送请求
http请求发送写法倒是没有很多,主要是参数是否在url上
get、put、post、delete
export function created(data) {return request({url: '/api/order',method: 'post',data})
}export function list(params) {return request({url: '/api/order',method: 'get',params})
}export function updated(data) {return request({url: '/api/order',method: 'put',data})
}export function deleted(data) {return request({url: '/api/order',method: 'delete',params: data})
}export function delete(id) {return request({url: '/api/user/remove?id=' + id,method: 'post'})
}
- get方法: 参数通常放在 URL 的查询字符串中,而不是请求体中。例如:GET /users?id=123,get方法直接传params就行了,参组会字段拼在url后面
- post/put 方法: 参数则会放在请求报文的请求体中,例如JSON 数据,放在请求体中,使用 application/json 编码类型。
- DELETE 方法:参数通常不会放在请求体中,而是通过 URL 参数或查询字符串来传递。例如:DELETE /users/123
后端接受参数
前后端以json格式进行数据交互,后端springboot项目
前端的post和put方法参数在请求报文的请求体中,所以使用@RequestBody:
后端:
@PostMapping("/data")public ResponseEntity<String> processData(@RequestBody Map<String, Object> requestData) {// Process data received from the frontendreturn ResponseEntity.ok("Data processed successfully");}
前端方法,传输的是kv结构,后端也用Map结构.
sendData() {const requestData = { key: 'value' }; // Data to be sent to the backendaxios.post('/api/data', requestData).then(response => {console.log(response.data);}).catch(error => {console.error(error);});},
当然,如果你Post方法提交的是表单数据,以 application/x-www-form-urlencoded 或 multipart/form-data 编码类型发送, 得用@RequestParam
get方法一般使用@RequestParam接受参数,也可以用@PathVariable
@RequestParam 如果前端key值和形参名称一致,可以不用写@RequestParam(“page”)
@GetMapping("/api/users")
public ResponseEntity<String> getUsers(@RequestParam("page") int page) {// 处理分页参数// ...return ResponseEntity.ok("Requested page: " + page);
}// 直接使用方法参数名作为参数名。
// Spring Boot 默认会根据参数名自动进行参数映射
@GetMapping("/api/users")
public ResponseEntity<String> getUsers(int page) {// 处理分页参数// ...return ResponseEntity.ok("Requested page: " + page);
}
当然@RequestParam 可以注解来映射不一样的参数名称
前端发送的请求:
axios.post('/api/endpoint', {first_name: 'John',last_name: 'Doe',user_age: 30
})
后端映射
@PostMapping("/endpoint")public ResponseEntity<String> handlePostRequest(@RequestParam("first_name") String firstName,@RequestParam("last_name") String lastName,@RequestParam("user_age") int age) {// 使用参数 firstName、lastName 和 age 来处理请求数据// ...return ResponseEntity.ok("Request handled successfully");}
get使用@PathVariable 注意@GetMapping 需要些占位符,占位符就是形参名称
@GetMapping("/api/users/{userId}")
public ResponseEntity<String> getUserById(@PathVariable Long userId) {// 根据 userId 查询用户信息// ...return ResponseEntity.ok("Requested user ID: " + userId);
}
DELETE 请求和get请求类似,后端 Spring Boot 项目的 Controller 层可以通过 @RequestParam 或 @PathVariable 来接收参数,一般都是后者
前端请求:
axios.delete('/api/users/123').then(response => {console.log(response.data); // 输出 "User with ID 123 deleted successfully."}).catch(error => {console.error(error);});
@DeleteMapping("/api/users/{userId}")public String deleteUser(@PathVariable Long userId) {// 根据 userId 删除用户return "User with ID " + userId + " deleted successfully.";}
总结
前后端使用json交互情况下,
前端 get put post ,参考示例
api.delete({k:v}).then(response => {//})
后端接受的话,get一般用@RequestParam,put/post用 @RequestBody
前端 delete方法,注意后端发送拼个唯一标识符
export function deleteUser(id) {
return request({
url: ‘/api/user/’+id,
method: ‘delete’
})
}
后端接收一般delete用 @PathVariable,展望符就是传入形参的名称
@DeleteMapping("/api/users/{userId}")public String deleteUser(@PathVariable Long userId) {// 根据 userId 删除用户return "User with ID " + userId + " deleted successfully.";}
相关文章:
前端发送请求和后端springboot接受参数
0.xhr、 ajax、axios、promise和async/await 和http基本方法 xhr、 ajax、axios、promise和async/await都是异步编程和网络请求相关的概念和技术! xhr:XMLHttpRequest是浏览器提供的js对象(API),用于请求服务器资源。…...
程序一直在阿里云服务器运行
保持阿里云服务器开机程序保持运行. 1.下载Screen CentOS 系列系统: yum install screen Ubuntu 系列系统: sudo apt-get install screen 2、运行screen,创建一个screen screen -S name:name是标记进程, 给进程备注…...
Linux 文件与目录管理
nvLinux 文件与目录管理 我们知道 Linux 的目录结构为树状结构,最顶级的目录为根目录 /。 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。 在开始本教程前我们需要先知道什么是绝对路径与相对路径。 绝对路径: 路径的写…...
【CSS】CSS 布局——弹性盒子
Flexbox 是一种强大的布局系统,旨在更轻松地使用 CSS 创建复杂的布局。 它特别适用于构建响应式设计和在容器内分配空间,即使项目的大小是未知的或动态的。Flexbox 通常用于将元素排列成一行或一列,并提供一组属性来控制 flex 容器内的项目行…...
“华为杯”研究生数学建模竞赛2018年-【华为杯】B题:光传送网建模与价值评估(附优秀论文及matlab代码实现)
目录 摘要: 1.问题重述 1.1 问题背景 1.2 问题提出 2.问题假设 3.符号说明...
群晖 nas 自建 ntfy 通知服务(梦寐以求)
目录 一、什么是 ntfy ? 二、在群晖nas上部署ntfy 1. 在Docker中安装ntfy 2. 设置ntfy工作文件夹 3. 启动部署在 docker 中的 ntfy(binwiederhier/ntfy) 三、启动配置好后,如何使用ntfy 1. 添加订阅主题( Subscribe to topic…...
Java基础练习九(方法)
求和 设计一个方法,用于计算整数的和 public class Work1101 {public static void main(String[] args) {// 设计一个方法,用于计算整数的和System.out.println(sum(7, 6));}public static int sum(int a, int b) {return a b;} }阶乘 编写一个方法&…...
Python-OpenCV中的图像处理-图像轮廓
Python-OpenCV中的图像处理-图像轮廓 轮廓什么是轮廓查找轮廓绘制轮廓轮廓特征图像的矩轮廓面积轮廓周长(弧长)轮廓近似凸包凸性检测边界矩形直边界矩形旋转边界矩形(最小面积矩形)最小外接圆最小外接三角椭圆拟合直线拟合 轮廓的…...
@Cacheable缓存相关使用总结
本篇文章主要讲解Spring当中Cacheable缓存相关使用 在实际项目开发中,有些数据是变更频率比较低,但是查询频率比较高的,此时为了提升系统性能,可以使用缓存的机制实现,避免每次从数据库获取 第一步:使用E…...
c++ static
static 成员 声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用 static修饰的成员函数,称之为静态成员函数。静态成员变量一定要在类外进行初始化。 看看下面代码体会一下: //其他类 class …...
【数据结构】——栈、队列的相关习题
目录 题型一(栈与队列的基本概念)题型二(栈与队列的综合)题型三(循环队列的判空与判满)题型四(循环链表表示队列)题型五(循环队列的存储)题型六(循…...
C++初阶之一篇文章教会你list(模拟实现)
list(模拟实现) list模拟实现list_node节点结构定义std::__reverse_iterator逆向迭代器实现list迭代器 __list_iterator定义list类成员定义list成员函数定义1.begin()、end()、rbegin()和rend()2.empty_init()3.构造函数定义4.swap5.析构函数定义6.clear…...
设备工单管理系统如何实现工单流程自动化?
设备工单管理系统属于工单系统的一种,基于其丰富的功能,它可以同时处理不同的多组流程,旨在有效处理发起人提交的事情,指派相应人员完成服务请求和记录全流程。该系统主要面向后勤管理、设备维护、物业管理、酒店民宿等服务行业设…...
ubuntu20.04.6anzhuang mtt s80
需要打开主板的Resize BAR和Above 4G功能,否则GPU显存不能被正确识别; 2. 在某些不支持PCIe Gen5的主板上,需要把PCIe速率由auto设置为PCIe Gen4速率; sudo apt install lightdm unity-greetersheding lightdm : lightdm sudo apt install /…...
【LeetCode-中等】剑指 Offer 36. 二叉搜索树与双向链表
题目链接 剑指 Offer 36. 二叉搜索树与双向链表 标签 后序遍历、二叉搜索树 步骤 二叉搜索树中的任一节点的直接前驱为其左子树的最右侧节点,直接后继为其右子树的最左侧节点。因此,可以通过这个关系来操作原来的二叉树。为了不影响深度较大的节点的…...
Linux —— 文件系统
目录 一,背景 二,文件系统 一,磁盘简介 磁盘分为SSD、机械磁盘;机械磁盘,即磁盘高速转动,磁头移动到读写扇区所在磁道,让磁头在目标扇区上划过,即可完成对扇区的读写操作ÿ…...
自然策略优化的解释 Natural Policy Optimization
Natural Policy Optimization(自然策略优化)是一种用于优化策略梯度算法的方法。它是基于概率策略的强化学习算法,旨在通过迭代地更新策略参数来最大化累积回报。 传统的策略梯度算法通常使用梯度上升法来更新策略参数,但这种方法…...
docker基本使用方法
docker使用 1. Docker 介绍 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。通过利用 …...
机器学习(十八):Bagging和随机森林
全文共10000余字,预计阅读时间约30~40分钟 | 满满干货(附数据及代码),建议收藏! 本文目标:理解什么是集成学习,明确Bagging算法的过程,熟悉随机森林算法的原理及其在Sklearn中的各参数定义和使用方法 代码…...
使用蓝牙外设却不小心把台式机电脑蓝牙关了
起因 今天犯了一个贼SB的错误,起因是蓝牙键盘突然就不能输入了(虽然是连接状态,但是按什么键都没有反应) 原来我的解决方法就是重启一下电脑,但是那会电脑开了贼多的软件。我就想重启也太麻烦了,既然重启…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
