axios 通报参数的方式(data 与 params)
系列文章目录提示:这里可以添加系列文章的全部文章的目录,目录须要自己手动添加
工作案例:在 vue 项目利用 axios 通报参数的方式(data 与 params)
提示:写完文章后,目录可以自动生成,怎样生成可参考右边的资助文档
前言
提示:这里可以添加本文要记录的大概内容:
工作中,用到的通报参数总结,后期一点点补齐。
提示:以下是本篇文章正文内容,下面案例可供参考
一、data 的情势
[*]通常用于 POST、PUT 等请求方法的请求体中通报数据。
[*]实用于通抨击杂的数据布局,比方 JSON 对象、FormData 等。
[*]当利用 data 通报参数时,参数会被包含在请求体中,适合通报须要修改服务器状态的数据。
比方,在发送 POST 请求时,利用 data 参数通报数据:axios.post('/api/url', data)
示例: data 情势的数据有可以做很多多少事变, 文件上传,表单提交 等
一般工作中利用data接收:
export function finalHandle(data) {
return request({
url: '/uav/finalHandle',
method: 'post',
data,
timeout: 30000, // 设置超时时间为30秒
})
}
// 表单
let formdata = new FormData();
formdata.append("handleUuid", handleUuid);
formdata.append("uavId", this.defaultUavSn);
后端Java接收:
@ResponseBody
@PostMapping(value = "/finalHandle")
public Result finalHandle(@CurrentUser EfUser efUser, @RequestParam("handleUuid") String handleUuid, @RequestParam(value = "uavId",required = false) String uavId ) {
try {
EfHandle efHandleObj =null;
StringuseridStr = String.valueOf(efUser.getId());
浏览器控制台:
https://img-blog.csdnimg.cn/direct/cc92820fb8d048b38d5f94bc6eba9dba.png
1). FormData的利用
当前端利用 FormData 时,应该利用 data 来通报参数,而不是 params。
在前端,利用 FormData 对象可以方便地构建和发送表单数据,包括文件上传等操作。以下是一个示例:
前端vue:
async upfile() {
try {
let formdata = new FormData();
// formdata.append("file", this.file)
formdata.set("file", this.file);//后端是根据"file" 来进行取值(@RequestParam("file") 或者@RequestBody MultipartFile file)
await this.$store.dispatch("uavs/uploadMediaResults", formdata).then((response) => {
const { code, message, data } = response;
if (code === 1) {
this.showMessage(message, "success");
} else {
this.showMessage(message, "warning");
}
})
.catch((error) => {
this.showMessage(error, "error");
});
} catch (error) {
}
},
在二次封装axios 的 request.js
export function uploadMediaResults(data) {
return request({
url: '/uav/uploadMediaResults',
method: 'post',
data,
timeout: 30000, // 设置超时时间为30秒
})
}
后端Java接收:
@ResponseBody
@PostMapping(value = "/uploadMediaResults")
public Result uploadMediaResults(@RequestBody MultipartFile file, HttpServletRequest request) {
try {
浏览器控制台:
https://img-blog.csdnimg.cn/direct/28bccb98a18640ada275e37f2ed880b6.gif#pic_center
二、params 的情势
[*]通常用于 GET 请求的 URL 查询参数中通报数据。
[*]实用于通报简单的键值对查询参数。
[*]当利用 params 通报参数时,参数会被附加在 URL 后面,用于 GET 请求中通报查询参数。
比方,在发送 GET 请求时,利用 params 参数通报查询参数:axios.get('/api/url', { params: params })。
前端vue: params是一个对象情势通报的
async downloadRouteTasks() {
let url = 'uavs/finalHandle';
try {
const params ={
routeTaskId :'11', // 后端对应 @RequestParam
}
// params是一个对象形式传递的
const response = await this.$store.dispatch('uavs/downloadRouteTasks', params);
const { code, data, message } = response;
if (code == 1) {
} else {
// this.showMessage(error, 'warning')
}
} catch (error) {
this.showMessage(error, 'error')
}
},
在二次封装axios 的 request.js
export function downloadRouteTasks(params) {
return request({
url: '/uav/downloadRouteTasks',
method: 'post',
timeout: 30000, // 设置超时时间为30秒
params,
})
}
后端Java接收:
@RequestMapping(value = "/downloadRouteTasks",method = RequestMethod.POST)
public ResponseEntity<byte[]> downloadRouteTasks(@RequestParam String routeTaskId) throws UnsupportedEncodingException {
// 使用 UTF-8 编码将字符串转换为字节数组
byte[] byteArray = routeTaskId.getBytes("UTF-8");
System.out.println("Byte array length: " + byteArray.length);
// 设置响应头
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Disposition", "attachment; filename=route_task.json");
// 返回响应
return new ResponseEntity<>(byteArray, headers, HttpStatus.OK);
}
//
假如后端不知道前端会传入哪些参数,可以利用 Map 接收全部的参数,并在后端对 Map 中的参数进行解析。以下是一个简单的示例:
@RestController
@RequestMapping("/uav")
public class YourController {
@GetMapping("/downloadRouteTask")
public ResponseEntity<byte[]> downloadRouteTask(@RequestParam Map<String, String> params) {
// 通过 Map 接收所有参数
// 根据实际情况对参数进行处理
String param1 = params.get("param1");// 获取参数
String param2 = params.get("param2");
// 处理参数并返回结果
}
}
在这个例子中,我们将参数直接作为 params 对象传入,这样它们将会被自动地添加到 URL 的查询字符串中。
三、混淆利用
在工作开辟vue利用vuex二次封装axios时, 通报参数。
const formdata = { uavId: this.defaultUavSn, handleUuid }
const payload = { that: this, url, formdata, efHandle: row }
const response = await this.$store.dispatch('uavs/finalHandle', payload);
在二次封装axios 的 request.js
export function finalHandle(payload) {
const {url,that,formdata,efHandle}= payload
return request({
url: '/uav/finalHandle',
method: 'post',
data:formdata,
params:efHandle,
timeout: 30000, // 设置超时时间为30秒
})
}
后端Java接收:
@ResponseBody
@PostMapping(value = "/finalHandle")
public Result finalHandle(@CurrentUser EfUser efUser, @RequestParam("handleUuid") String handleUuid, @RequestParam(value = "uavId",required = false) String uavId ,@RequestBody(required = false) EfHandle efHandle) {
try {
浏览器控制台:
https://img-blog.csdnimg.cn/direct/90f438e46d9c4607b27f917b7395cdea.png
1). 文件类传参
假如上传一些参数 并且带有上传文件 后端java 怎么写接收?
axios实例:
在前端利用 axios 通报包含文件和其他参数的请求时,您可以利用 FormData 对象来构建请求体,并将文件和其他参数添加到 FormData 对象中。然后通过 axios 发送包含 FormData 对象的 POST 请求。以下是一个示例代码:
// 假设参数 param1、param2 和文件 file 已经定义
const formData = new FormData();
formData.append('param1', param1);
formData.append('param2', param2);
formData.append('file', file);
axios.post('/uploadWithParams', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
})
.then(response => {
// 请求成功处理逻辑
})
.catch(error => {
// 请求失败处理逻辑
});
在vue前端 – 在二次封装axios 的 request.js
https://img-blog.csdnimg.cn/direct/6a677079a79d4aca970211de2a2a9032.gif#pic_center
在java 接收文件参数:
后端是根据"file" 来进行取值(@RequestParam(“file”) 大概@RequestBody MultipartFile file)
@ResponseBody
@PostMapping(value = "/uploadMediaResults")
public Result uploadMediaResults(@RequestParam String param1, @RequestParam String param2,@RequestBody MultipartFile file, HttpServletRequest request) {
try {
//
@RestController
public class YourController {
@PostMapping("/uploadWithParams")
public ResponseEntity<String> handleFileUploadWithParams(@RequestParam String param1, @RequestParam String param2, @RequestPart MultipartFile file) {
// 处理上传的文件和其他参数
}
}
在这个示例中,我们利用 @RequestParam 注解来接收表单中的参数 param1 和 param2,利用 @RequestPart 注解来接收上传的文件。请注意,@RequestPart 注解不要求指定参数名,它将会自动匹配文件部分。
假如您的请求中包含多个文件,您可以将 @RequestPart 注解设置为一个数组来接收多个文件:
@RestController
public class YourController {
@PostMapping("/uploadWithParamsAndMultipleFiles")
public ResponseEntity<String> handleFileUploadWithParamsAndMultipleFiles(@RequestParam String param1, @RequestParam String param2, @RequestPart("files") MultipartFile[] files) {
// 处理上传的多个文件和其他参数
}
}
假如您的请求中包含多个文件,您可以将 @RequestPart 注解设置为一个数组来接收多个文件:
总结
提示:这里对文章进行总结:
[*]params是添加到url的请求字符串中的,一般用于get请求。
[*]data是添加到请求体(body)中的, 一般用于post请求。
总的来说,data 实用于通报请求体中的数据,而 params 实用于通报 URL 查询参数。根据差别的需求和请求类型选择合适的参数通报方式可以更好地完成相应的 HTTP 请求。
前端通报利用 FormData 大概 params参数 后端java 都可以利用 @RequestParam 接收 ; 当参数较多大概不明确可以利用Map 接收全部的参数,并在后端对 Map 中的参数进行解析 ( @RequestParam Map<String, String> params)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]