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

前后端传参

文章目录

  • 后端接收参数
  • 前端发送请求
    • 引入axios实现发送请求
    • 引入qs实现传参格式化
    • axios基本写法
  • 前后端传参
    • 将数组转化为单个Json字符串传输
      • 前端发送
      • 后端接收
    • 将数组转换为json对象进行传输
      • 前端发送请求
      • 后端接受请求
    • 直接传输数组
      • 前端发送请求
      • 后端接收请求
  • 前后端发送请求格式需要对应起来
  • 总结
    • 发送Get请求,后端可以直接使用@RequestParam接收,前后端名称要对应
    • 发送Post请求,后端最好使用@RequestBody接收参数
    • 传输数组时,前后端传输的格式要对应

后端接收参数

参考文章:@PathVariable@RequestParam@RequestBody接收参数区别

前端发送请求

引入axios实现发送请求

npm install axios

引入qs实现传参格式化

因为axios自带qs,引入了axios后可直接引入

import Qs from 'qs'

qs是否启用,需要根据后端的接收参数形式进行判断

axios基本写法

axios.js

import axios from "axios";
import { Message } from "element-ui";
import { getStore, setStore } from "./storage";let base = '/xx';
axios.defaults.timeout = 15000;//添加请求拦截器
axios.interceptors.request.use(function(config) {// 在发送请求之前做些什么return config;
}, function(error) {Message.error('请求出错');//对请求错误做些什么return Promise.reject(error);
})//添加响应拦截器
axios.interceptors.response.use(function(response) {// const data = response.data;//对响应数据做点什么return response;
}, function(error) {//对响应错误做点什么return Promise.reject(error)
})/*** 发送登录get请求*/
export const getRequest = (url,params) => {let accessToken = getStore('accessToken');return axios({method: 'get',url:`${base}${url}`,params:params,headers: {'Authorization': accessToken,}});
};/*** 发送未登录get请求*/
export const getNoAuthRequest = (url,params) => {return axios({method: 'get',url: `${base}${url}`,params: params});
};/*** 发送已登录 表单格式 post请求*/
export const postRequest = (url,params) => {let accessToken = getStore('accessToken');return axios({method: 'post',url: `${base}${url}`,data: params,transformRequest: [function(data){let ret = '';for (let it in data){ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';}ret = ret.substring(0,ret.length - 1);return ret;}],headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8','Authorization': accessToken}});
};/*** 发送已登录 body post请求*/
export const postBodyRequest = (url,params) => {let accessToken = getStore('accessToken');return axios({method: 'post',url: `${base}${url}`,data: params,headers: {'Authorization': accessToken,'Content-Type': 'application/json;charset=UTF-8'}});
};/*** 发送未登录 form post请求*/
export const postNoAuthRequest = (url,params) => {return axios({method: 'post',url: `${base}${url}`,data: params,transformRequest: [function(data){let ret = '';for (let it in data){ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';}ret = ret.substring(0,ret.length - 1);return ret;}],headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',}});
};/*** 发送未登录 body post请求*/
export const postNoAuthBodyRequest = (url,params) => {return axios({method: 'post',url: `${base}${url}`,data: params,headers: {'Content-Type': 'application/json;charset=UTF-8'}});
};

前后端传参

将数组转化为单个Json字符串传输

前端发送

let data = [1,2,3]
sendPostRequest(JSON.stringfy(data)).then(res => {if(res.data.code == 200){console.log('请求成功')}else{console.log('请求失败')}
})

后端接收

@PostMapping("/receive")
public Result receiveParams(@RequstBody String ids){System.out.println(ids);return Result.ok();
}

将数组转换为json对象进行传输

前端发送请求

const ids = [1,2,3]
const data = qs.stringify({
"ids": JSON.stringify(ids)
})
sendPostRequest(JSON.stringfy(data)).then(res => {if(res.data.code == 200){console.log('请求成功')}else{console.log('请求失败')}
})

后端接受请求

@PostMapping("/receive")
public Result receiveParams(@RequstBody Map<String,Object> idsMap){System.out.println(idsMap);return Result.ok();
}

直接传输数组

前端发送请求

const ids = [1,2,3]
sendPostRequest(JSON.stringfy(data)).then(res => {if(res.data.code == 200){console.log('请求成功')}else{console.log('请求失败')}
})

后端接收请求

@PostMapping("/receive")
public Result receiveParams(@RequstBody List<Integer> ids){System.out.println(ids);return Result.ok();
}

前后端发送请求格式需要对应起来

  • get请求:最好使用@GetMapping进行接收
  • post请求:最好使用@PostMapping进行接收
  • @RequestMapping接收post请求时容易出现参数对应不上的情况

总结

发送Get请求,后端可以直接使用@RequestParam接收,前后端名称要对应

发送Post请求,后端最好使用@RequestBody接收参数

传输数组时,前后端传输的格式要对应

相关文章:

  • 企业内训|大模型/智算行业发展机会深度剖析-某数据中心厂商
  • EZUIKit.js萤石云vue项目使用
  • BufferQueue低延迟优化,以及SurfaceView帧率上限问题解决
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-26
  • 【移植】小型系统平台驱动移植
  • 计算机毕业设计 基于Flask+Vue的博客系统 Python毕业设计 前后端分离 附源码 讲解 文档
  • Python PyQt5 在frame中生成多个QLabel控件和彻底销毁QLabel控件
  • 【工具分享】Chimera勒索病毒解密工具
  • 流行的微前端框架有哪些,适应场景是什么
  • overlayscrollbars使用
  • 基于大数据技术的颈椎病预防交流与数据分析及可视化系统
  • 易燃气体检测系统源码分享
  • 统信服务器操作系统【qcow2 镜像空间扩容】方案
  • 【速成Redis】03 Redis 五大高级数据结构介绍及其常用命令 | 消息队列、地理空间、HyperLogLog、BitMap、BitField
  • CVE-2024-1112 Resource Hacker 缓冲区溢出分析
  • DataBase in Android
  • Date型的使用
  • Docker下部署自己的LNMP工作环境
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • SpiderData 2019年2月13日 DApp数据排行榜
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Unix命令
  • webgl (原生)基础入门指南【一】
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 创建一种深思熟虑的文化
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 通信类
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 小李飞刀:SQL题目刷起来!
  • 因为阿里,他们成了“杭漂”
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • !!Dom4j 学习笔记
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • #预处理和函数的对比以及条件编译
  • (1)Nginx简介和安装教程
  • (21)起落架/可伸缩相机支架
  • (PADS学习)第二章:原理图绘制 第一部分
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (八)Spring源码解析:Spring MVC
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (论文阅读11/100)Fast R-CNN
  • (三)mysql_MYSQL(三)
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)程序员技术练级攻略
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET Core 版本不支持的问题
  • .Net Core与存储过程(一)
  • .Net 代码性能 - (1)
  • .NetCore部署微服务(二)