前后端传参

文章目录

后端接收参数

参考文章:@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接收参数

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

相关推荐
J2虾虾2 小时前
SpringBoot和mybatis Plus不兼容报错的问题
java·spring boot·mybatis
毕设源码-郭学长3 小时前
【开题答辩全过程】以 基于springboot 的豪华婚车租赁系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
曹轲恒5 小时前
SpringBoot整合SpringMVC(上)
java·spring boot·spring
码农水水6 小时前
米哈游Java面试被问:机器学习模型的在线服务和A/B测试
java·开发语言·数据库·spring boot·后端·机器学习·word
计算机学姐7 小时前
基于SpringBoot的美食分享交流平台
java·spring boot·后端·spring·java-ee·intellij-idea·美食
小王不爱笑1327 小时前
SpringBoot整合Thymeleaf
spring boot
Knight_AL8 小时前
Spring Boot 事件机制详解:原理 + Demo
java·数据库·spring boot
派大鑫wink10 小时前
【Day57】SpringBoot 整合 Redis:吃透缓存配置与 API 实战
spring boot·redis·缓存
九皇叔叔11 小时前
application.yml 文件无 Spring 图标 + 无自动提示
java·spring boot·spring
让我上个超影吧12 小时前
天机学堂——多级缓存
java·spring boot·spring cloud