axios 传递参数的方式(data 与 params)

这篇具有很好参考价值的文章主要介绍了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;
            String  useridStr = String.valueOf(efUser.getId());

浏览器控制台:

axios params,小白日志---前端,前端,vue.js,javascript,java,spring boot

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 {

浏览器控制台:
axios params,小白日志---前端,前端,vue.js,javascript,java,spring boot


二、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 {

浏览器控制台:

axios params,小白日志---前端,前端,vue.js,javascript,java,spring boot

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
axios params,小白日志---前端,前端,vue.js,javascript,java,spring boot
在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 注解设置为一个数组来接收多个文件:

总结

提示:这里对文章进行总结:

  1. params是添加到url的请求字符串中的,一般用于get请求。
  2. data是添加到请求体(body)中的, 一般用于post请求。

总的来说,data 适用于传递请求体中的数据,而 params 适用于传递 URL 查询参数。根据不同的需求和请求类型选择合适的参数传递方式可以更好地完成相应的 HTTP 请求。

前端传递使用 FormData 或者 params参数 后端java 都可以使用 @RequestParam 接收 ; 当参数较多或者不明确可以使用Map 接收所有的参数,并在后端对 Map 中的参数进行解析 ( @RequestParam Map<String, String> params)文章来源地址https://www.toymoban.com/news/detail-854685.html

到了这里,关于axios 传递参数的方式(data 与 params)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包