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

axios同步请求_Spring Boot+Vueaxios异步请求数据的12种操作(上篇)

5d874755d4c710860d29512296767e4e.png   Java大联盟

  致力于最高效的Java学习

关注

f7804fcc37d4d41ac1dab62f7f54c8ab.gif

Spring Boot + Vue 前后端分离最核心的操作就是通过异步请求完成数据同步,这其中又可以分为很多种不同的情况,比如是 GET 请求还是 POST 请求?参数是普通变量还是 JSON?基于 RESTful 架构如何操作等等,今天楠哥就把这些不同的请求方式做了一个汇总,一次性写清楚,以后需要用的时候直接来查这篇文章即可。 前后端分离异步请求共包含以下 12 种情况: 1、GET 请求 + 普遍变量传参 2、GET 请求 + JSON 传参 3、PSOT 请求 + 普遍变量传参 4、POST 请求 + JSON 传参 5、基于 RESTful 的 GET 请求 + 普遍变量传参 6、基于 RESTful 的 GET 请求 + JSON 传参 7、基于 RESTful 的 PSOT 请求 + 普遍变量传参 8、基于 RESTful 的 POST 请求 + JSON 传参 9、基于 RESTful 的 PUT 请求 + 普遍变量传参 10、基于 RESTful 的 PUT 请求 + JSON 传参 11、基于 RESTful 的 DELETE 请求 + 普遍变量传参 12、基于 RESTful 的 DELETE 请求 + JSON 传参 Vue 中异步请求使用 axios 组件来完成,axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,可以用在浏览器和 node.js 中。Vue 工程中使用 axios,首先要 安装 axios,命令如下所示。
npm install axios
然后创建 Vue 工程, 手动导入 axios 组件,命令如下所示。
vue add axios
Vue 环境搭建好之后,创建 Spring Boot 工程,之后就可以分别完成前后端代码的开发。 1、GET 请求 + 普遍变量传参 axios 异步 GET 请求的方法为  axios.get(url,params).then() url :请求的 URL。 params :参数,格式为  {params:{name:value,name:value}} then() :请求成功的回调函数。 Vue 代码如下所示。
<template>    <div>        <button type="button" @click="getData()">getDatabutton><br/>    div>template><script>    export default {        methods: {            getData(){                const _this = this                axios.get('http://localhost:8181/getData',{params:{id:1,name:'张三'}}).then(function (resp) {                    console.log(resp.data)                })            }        }    }script>
Spring Boot 代码如下所示。
@RestControllerpublic class DataHandler {    @GetMapping("/getData")    public String getData(Integer id,String name){        System.out.println(id);        System.out.println(name);        return id+name;    }}
分 别启动 Vue 和 Spring Boot,点击  getData 按钮,结果如下图所示。

76e5596754b9c9382a0e5c9c9a87c48f.png

这是前后端分离开发最常见的错误: 跨域 。当请求不在同一域名下的资源文件时,浏览器限制了此类请求,导致报错,这就是跨域问题,如何解决呢?可以在前端应用中处理,也可以在后端应用中进行处理,这里我们选择在 Spring Boot 中处理,方法非常简单,只需要添加一个 Configuration 即可,具体代码如下所示。
@Configurationpublic class CorsConfig implements WebMvcConfigurer {    @Override    public void addCorsMappings(CorsRegistry registry) {        registry.addMapping("/**")                .allowedOrigins("*")                .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")                .allowCredentials(true)                .maxAge(3600)                .allowedHeaders("*");    }}
再次启动 Spring Boot,点击  getData 按钮,结果如下图所示。

e39e9ee88a5968a1a7b80a0c927d97b5.png

点击 getData 按钮之后,客户端输出了后端服务返回的数据,axios 请求调用成功。 2、GET  请求 + JSON  传参 Vue 代码如下所示。
<template>    <div>        <button type="button" @click="getJSON()">getJSONbutton><br/>    div>template><script>    export default {        methods: {            getJSON(){                const _this = this                var user = {                    id:1,                    name:'张三'                }                axios.get('http://localhost:8181/getJSON',{params:user}).then(function (resp) {                    console.log(resp.data)                })            }        }    }script>
Spring Boot 代码如下所示。
@Datapublic class User {    private Integer id;    private String name;}
@GetMapping("/getJSON")public User getJSON(User user){    System.out.println(user);    return user;}
分 别启动 Vue 和 Spring Boot,点击  getJSON  按钮,结果如下图所示。

6e80c43167a6ea55369bbcab35d1d5f3.png

3、 PSOT 请求 + 普遍变量传参 axios 异步 POST 请求的方法为  axios.post(url,params).then() url :请求的 URL params :参数,POST 请求中,参数格式不再是   {params:{name:value,name:value}} ,而需要将 参数封装到  URLSearchParams 对象中。 then() :请求成功的回调函数。 Vue 代码如下所示。
<template>    <div>        <button type="button" @click="postData()">postDatabutton><br/>    div>template><script>    export default {        methods: {            postData(){                const _this = this                var params = new URLSearchParams()                params.append('id', '1')                params.append('name', '张三')                axios.post('http://localhost:8181/postData',params).then(function (resp) {                    console.log(resp.data)                })            }        }    }script>
Spring Boot 代码如下所示。
@PostMapping("/postData")public User postData(Integer id,String name){    System.out.println(id);    System.out.println(name);    return new User(id,name);}
‍ 分 别启动 Vue 和 Spring Boot,点击  postData  按钮,结果如下图所示。

8bfcabb5cde7d86b10c35692eac308e1.png

4、 PSOT 请求 + JSON 传参 params 同样需要将 JSON 对象封装到 URLSearchParams 中, Vue 代码如下所示。
<template>    <div>        <button type="button" @click="postJSON()">postJSONbutton><br/>    div>template><script>    export default {        methods: {            postJSON(){                const _this = this                var params = new URLSearchParams()                params.append('id', '1')                params.append('name', '张三')                axios.post('http://localhost:8181/postJSON',params).then(function (resp) {                    console.log(resp.data)                })            }        }    }script>
Spring Boot 代码如下所示。
@PostMapping("/postJSON")public User postJSON(User user){    System.out.println(user);    return new User(1,"张三");}
分 别启动 Vue 和 Spring Boot,点击  postJSON  按钮,结果如下图所示。

2d26729a5a30cf8e5d1f652a3a898778.png

5、基于 RESTful  GET 请求 + 普遍变量传参 基于 RESTful 的 axios 异步 GET 请求的方法为  axios.gett(url).then() url :请求的 URL,直接追加参数。 then() :请求成功的回调函数。 Vue 代码如下所示。
<template>    <div>        <button type="button" @click="restGetData()">restGetDatabutton><br/>    div>template><script>    export default {        methods: {            restGetData(){                const _this = this                axios.get('http://localhost:8181/restGetData/1').then(function (resp) {                    console.log(resp.data)                })            }        }    }script>
Spring Boot 代码如下所示。
@GetMapping("/restGetData/{id}")public User restGetData(@PathVariable("id") Integer id){    System.out.println(id);    return new User(1,"张三");}
分 别启动 Vue 和 Spring Boot,点击  restGetData  按钮,结果如下图所示。

d549250fb12aed8371c757d5a327b6af.png

6、基于 RESTful  GET 请求 + JSON 传参 基于 RESTful 的 axios 异步 GET 请求的方法为  axios.get(url,params).then() url :请求的 URL。 params:参数,格式为  {params:{name:value,name:value}} 。 then() :请求成功的回调函数。 Vue 代码如下所示。
<template>    <div>        <button type="button" @click="restGetJSON()">restGetJSONbutton><br/>    div>template><script>    export default {        methods: {            restGetJSON(){                const _this = this                axios.get('http://localhost:8181/restGetJSON',{params:{id:1,name:'张三'}}).then(function (resp) {                    console.log(resp.data)                })            }        }    }script>
‍ Spring Boot 代码如下所示。
@GetMapping("/restGetJSON")public User restGetJSON(User user){    System.out.println(user);    return new User(1,"张三");}
分 别启动 Vue 和 Spring Boot,点击 restGetJSON  按钮,结果如下图所示。

ad59397c6d645f6adaf2d7ce02a720aa.png

‍ 以上就是 axios 异步请求数据的 6 种形式,你都学会了吗? 

推荐阅读

1、快速上手Spring Boot+Vue前后端分离

2、Vue+Element UI搭建后台管理系统界面

3、一文搞懂前后端分离

4、徒手撸一个Spring MVC框架

7c56e0d588405772b92a31bdbe915010.png

相关文章:

  • Google的潜在大敌Vivisimo
  • c++程序判断该关系是否为函数与函数类型_【笔记】JavaScript 数据类型汇总
  • UTF-8与GB2312互转方法
  • python面向对象六大原则_Python 面向对象 OOP-三大特性#学习猿地
  • sdk是什么意思_深入浅出之技术知识,PM到底要懂些什么?
  • python中import time用法_详解python:time模块用法
  • 嵌入式Web视频点播系统实现方法
  • python3 join_python3数据拼接——merge/join/append/concat
  • python tkinter详解_Python入门教程。从优秀的教程开始,学习才能名列前茅
  • [转贴]Guest权限突破
  • winform预览dwg文件_查看 CAD文件,电脑上又没装AutoCAD?这款CAD快速看图工具能帮你...
  • [转贴]ipc$详细解释大全
  • python替换txt某一行_python 怎么替换文件的某一行的某一指定字段,如果文件很大呢?...
  • 如何在html网页中嵌入一段语法高亮的代码?_让我们来学习一下这个markdown语法...
  • rundll32.exe的用途
  • 2017-08-04 前端日报
  • Android系统模拟器绘制实现概述
  • C++类中的特殊成员函数
  • iOS | NSProxy
  • Magento 1.x 中文订单打印乱码
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • XForms - 更强大的Form
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 观察者模式实现非直接耦合
  • 你真的知道 == 和 equals 的区别吗?
  • 驱动程序原理
  • 如何进阶一名有竞争力的程序员?
  • 详解NodeJs流之一
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 因为阿里,他们成了“杭漂”
  • 怎么把视频里的音乐提取出来
  • 积累各种好的链接
  • #每天一道面试题# 什么是MySQL的回表查询
  • #在 README.md 中生成项目目录结构
  • (145)光线追踪距离场柔和阴影
  • (3)STL算法之搜索
  • (二十四)Flask之flask-session组件
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (十八)SpringBoot之发送QQ邮件
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET 8.0 中有哪些新的变化?
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .NET开发人员必知的八个网站
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [2669]2-2 Time类的定义
  • [AX]AX2012 SSRS报表Drill through action
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn
  • [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素