SpringBoot快速入门笔记(6)

文章目录

Axios网络请求

1、简介

项目开发中,前端页面需要的数据往往要从服务器端获取,这必然涉及到和服务器的通信

Axios基于promise网络请求库,作用于node.js和浏览器中;在浏览器端使用XMLHttpRequests发送网络请求,并能自动完成JSON数据的转换

安装:npm install axios

2、导入

在终端下载

可以选择在特定组件导入,也可以全局导入,在main.js

javascript 复制代码
import axios from 'axios'

3、网络请求

可以在官方文档查看使用案例

这里使用我们之前写好的UserController的后端,用浏览器测试下localhost/user/findAll接口😀{后端端口我定义的是80}

可以看到还是正常拿到了数据,我们其实是通过浏览器输入发送的请求,这里采用axios帮我们发送网络请求,例如在App.vue组件中我们让其在创建时就发送请求并打印

可以F12看到findAll爆红了,请求不到,这是由于我们没有说明这个端口,准确的来说应该是http://localhost:80/user/findAll🤓

修改后刷新继续查看,发现还是爆红,打开控制台看报错原因

javascript 复制代码
created:function(){
    axios.get("http://localhost:80/user/findAll").then(function(response){
      console.log(response)
    })			 }

4、跨域问题

上面的报错其实是跨域问题

为了保证浏览器的安全,不同源的客户端脚本在没有明确授权下,不能读写对方资源,称为同源策略(Sameoriginpolicy)

同源:两个页面具有相同的协议,主机和端口号

所以我们要解决这个问题,就是授权即可😮

CORS(Cross-Origin Resource Sharing)由W3C指定的一种跨域资源共享技术标准,目的就是为了解决前端的跨域请求==>让后端实现CORS接口

在Spring Boot中配置CORS:

①全局配置:可以添加配置类CorsConfig 实现 WebMvcConfigurer接口

②局部配置:在控制器前添加@CrossOrigin

由于我们这里只是测试UserController,所以单独注解即可

重启项目,可以发现这次访问到数据了 😎

5、数据渲染

我们拿到数据后,可以把数据渲染到页面上

这里新建AxiosTest.vue组件,从elementUI官网拉一个表格过来使用,删掉tableData的东西

javascript 复制代码
<template>
    <el-table
      :data="tableData"
      style="width: 100%">
      <el-table-column
        prop="date"
        label="日期"
        width="180">
      </el-table-column>
      <el-table-column
        prop="name"
        label="姓名"
        width="180">
      </el-table-column>
      <el-table-column
        prop="address"
        label="地址">
      </el-table-column>
    </el-table>
  </template>

  <script>
    export default {
      data() {
        return {
          tableData: []
        }
      }
    }
  </script>

为了避免多次导入,我们这里还是在全局配置main.js中加上import axios from 'axios'

在新组建里重新编写,并将数据赋值:

发现还是报错了,这里涉及到js作用域的问题,只需要使用箭头函数就行:


可以发现这一次没有报错,注意我们的数据参数是id,username,password,birthday,将AxiosTest组件的表格参数变一下

javascript 复制代码
<template>
    <el-table
      :data="tableData"
      style="width: 100%">
      <el-table-column
        prop="id"
        label="编号"
        width="180">
      </el-table-column>
      <el-table-column
        prop="username"
        label="姓名"
        width="180">
      </el-table-column>
      <el-table-column
        prop="password"
        label="密码">
      </el-table-column>
      <el-table-column
        prop="birthday"
        label="生日">
    </el-table>
  </template>

浏览器运行发现数据已经渲染到页面表格中了😜

6、全局配置

每个组件都要导入axios所以我们在main.js中导入,这串http字符串其实也可以简化,在main.js中:

javascript 复制代码
import axios from 'axios'
axios.defaults.baseURL="http://localhost:80"
Vue.prototype.$http = axios

再对应修改AxiosTest组件里的东西,用$http指代axios,依旧正常渲染数据🤓

相关推荐
uzong1 小时前
技术故障复盘模版
后端
GetcharZp1 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程2 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研2 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi2 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
一只爱撸猫的程序猿3 小时前
使用Spring AI配合MCP(Model Context Protocol)构建一个"智能代码审查助手"
spring boot·aigc·ai编程
甄超锋3 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
星星火柴9363 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
阿华的代码王国3 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Jimmy3 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程