详解Vue与Spring Boot前后端是怎么对接起来的

 更新时间:2025年06月19日 09:41:43   作者:snowfoootball  
这篇文章主要介绍了Vue与Spring Boot前后端是怎么对接起来的相关资料,通过Vue与SpringBoot案例演示Axios调用接口,强调职责分离与工程结构,需要的朋友可以参考下

前言

很多刚学习前端(HTML/CSS/JS/Vue)或者后端(Java/Spring Boot)的朋友,都会遇到一个共通的困惑:

“我能写页面,也能写接口,但它们怎么连起来的?”

本篇文章就为你解锁介绍这个最基础的知识点,从前后端分离的思想入门,到Vue 使用 Axios 调用 Spring Boot 接口的案例,一步步带你搞定。

一、什么是前后端分离?

1. 传统开发模式:页面与接口混在一起

在早期的 Web 应用开发中,前端页面和后端逻辑常常紧密耦合在一起。例如,一个 Java Web 项目往往采用 JSP 页面 + Servlet 或 Spring MVC Controller 的模式。用户请求一个页面,服务器会在后端拼接 HTML 并将整页内容返回给浏览器。

这种模式的特点是:

  • 页面渲染在服务端完成,前端只负责展示结果;
  • 前端和后端代码耦合严重,一处改动往往需要同时修改后端 JSP 文件与 Controller 逻辑;
  • 开发效率受限,前端无法独立开发或测试功能,后端压力较大;
  • 不利于适配现代多端设备(PC、移动、App)。

2. 前后端分离模式:各司其职、职责清晰

随着前端技术的发展,特别是 Vue、React、Angular 等现代前端框架的流行,前后端分离逐渐成为主流架构模式。

前后端分离指的是:

前端和后端分为两个独立的项目,分别负责不同的职责,通过接口(API)进行通信。

前端职责:

  • 使用 Vue / React / 原生 HTML+CSS+JS 等构建用户界面;
  • 负责页面渲染、交互逻辑(如按钮点击、表单输入);
  • 通过 Ajax、Axios 等工具调用后端接口,动态获取或提交数据。

后端职责:

  • 使用 Spring Boot / Node.js / Python 等语言框架处理业务逻辑;
  • 与数据库交互,完成增删改查;
  • 向前端提供标准的 HTTP 接口(通常返回 JSON 数据)。

通信方式:

  • 通常采用 HTTP 协议 + JSON 数据格式
  • 前端通过调用 RESTful 接口(如 /api/user/list​)获取或操作数据;
  • 也可以使用 WebSocket 实现实时通信。

3. 前后端分离的优点:

优点说明
代码职责清晰前后端各自专注领域,分工明确,减少相互干扰
便于团队协作前端和后端可以并行开发,提高效率
更易于测试与部署接口可独立测试,部署时前后端可以分别上线
更适配现代应用需求支持 SPA(单页应用)、PWA、移动端、小程序等多种终端
更灵活的技术选型前后端可使用不同技术栈,如 Vue + Spring Boot 或 React + Node.js
更好的用户体验页面加载更快、响应更灵活,可实现局部刷新与动态更新

二、前后端工程结构与开发流程

在前后端分离的开发模式中,前后端分别作为两个独立项目进行开发和部署。下面是一个典型的工程结构:

📁 vue-front         # 前端项目,使用 Vue3 + Vite 开发,独立启动
📁 springboot-back   # 后端项目,使用 Spring Boot 开发,提供 RESTful 接口

2.1 开发流程简述:

  • 后端先行:定义接口

    • 例如:GET /api/users/{id}​,返回指定用户的信息,数据格式为 JSON。
  • 前端对接:使用 Axios 请求接口

    • 获取数据并渲染到页面中。
  • 前后协作:依赖接口文档

    • 接口文档可以手动编写,也可以通过 Swagger 等工具自动生成,便于双方协作。

在编写好了后端部分的程序后,我们通常提供一个后端接口 Spring Boot API,那么核心操作就是获取后端接口提供的数据然后渲染在前端

上,这一部分我们主要通过Axios来完成。

2.2 什么是axios?

Axios 是一个基于 Promise 的 HTTP 客户端,运行在浏览器和 Node.js 中,用于发送网络请求(比如 GET、POST 等),常用于前端项目中向后端接口获取或提交数据。

简单来说:

Vue/React 项目中,你想调用后端的接口?就用 Axios!

Axios 的优势

为什么不用原生 fetch​,而要用 Axios 呢?看看 Axios 的好处:

优势说明
简单语法fetch​写法更直观,不需要额外.json()
请求拦截/响应拦截可统一加 Token、统一处理错误
自动转换 JSON请求参数和响应结果都自动处理 JSON
支持超时、取消请求网络不稳定时很有用
支持并发请求可同时发送多个请求,如axios.all
浏览器兼容性好比 fetch 更广泛支持老版本浏览器

Axios 安装与基本用法

安装

npm install axios

导入使用

import axios from 'axios'

基础请求示例

1. GET 请求(获取数据)

axios.get('/api/users/1')
  .then(res => {
    console.log(res.data) // 拿到后端返回的数据
  })
  .catch(err => {
    console.error('请求失败', err)
  })

2. POST 请求(提交数据)

axios.post('/api/users', {
  name: '小红',
  email: 'hong@example.com'
})

3. PUT 请求(更新数据)

axios.put('/api/users/1', {
  name: '新名字'
})

4. DELETE 请求(删除数据)

axios.delete('/api/users/1')

但是注意,我们不推荐在组件中直接写 axios.get(...)​,而是在一个单独的文件中封装接口逻辑,便于统一维护、修改和复用。以一个用户接口为例子。

封装 Axios 请求(services/user.js)

// 📁 src/services/user.js
import axios from 'axios'

// 后端接口基础地址
const base = 'http://localhost:8080/api/users'

// 获取指定用户
export function getUser(id) {
  return axios.get(`${base}/${id}`)
}

注意:这里的 base​ 就是你提到的“后端接口地址”的来源!我们用字符串拼接的方式,把用户 ID 加到 URL 上,形成完整请求地址。

在组件中调用(UserInfo.vue)

<script setup>
import { ref, onMounted } from 'vue'
import { getUser } from '../services/user.js'

// 用 ref 创建响应式用户对象
const user = ref({})

// 页面加载时请求后端接口
onMounted(async () => {
  const res = await getUser(1) // 发起 HTTP 请求,参数 1 是用户 ID
  user.value = res.data // 响应结果赋值给 user
})
</script>

<template>
  <div v-if="user.name">
    <h2>用户名:{{ user.name }}</h2>
    <p>邮箱:{{ user.email }}</p>
  </div>
</template>

三. 额外的…

全局拦截器(加 Token)

在登录系统中,很多请求需要携带用户的身份凭证(Token)。你可以配置一个请求拦截器,自动给所有请求加上 Token:

// 在 main.js 或 http.js 中统一配置
axios.interceptors.request.use(config => {
  const token = localStorage.getItem('token') // 从本地获取 Token
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
})

可选优化:使用 Vite 代理简化请求地址

你可能注意到请求地址写成 http://localhost:8080/...​ 很不优雅。如果你在 vite.config.js​ 中加了代理:

// vite.config.js
export default {
  server: {
    proxy: {
      '/api': {
        target: 'http://localhost:8080',
        changeOrigin: true
      }
    }
  }
}

那么在封装 Axios 时可以把 base 改为:

const base = '/api/users'

这样你写 axios.get('/api/users/1')​,其实内部就会代理成 http://localhost:8080/api/users/1​,前端代码更简洁,跨域问题也解决了。

总结

到此这篇关于详解Vue与Spring Boot前后端是怎么对接起来的文章就介绍到这了,更多相关Vue与SpringBoot前后端对接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java IO文件编码转换实现代码

    Java IO文件编码转换实现代码

    这篇文章主要介绍了Java IO文件编码转换实现代码,有需要的朋友可以参考一下
    2013-12-12
  • springboot加载json配置全过程

    springboot加载json配置全过程

    Spring Boot加载JSON配置的步骤:实现PropertySourceLoader接口,创建spring.factories文件,并在resources下添加application.json,通过指定spring.profiles.active属性来激活配置文件
    2025-12-12
  • springboot如何读取sftp的文件

    springboot如何读取sftp的文件

    这篇文章主要介绍了springboot如何读取sftp的文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • ApplicationRunner、InitializingBean、@PostConstruct执行顺序解读

    ApplicationRunner、InitializingBean、@PostConstruct执行顺序解读

    Spring Boot提供CommandLineRunner与ApplicationRunner接口,用于启动时执行初始化任务,前者接收原始参数数组,后者封装为ApplicationArguments对象,两者执行顺序可通过@Order控制
    2025-09-09
  • Java中invokedynamic字节码指令问题

    Java中invokedynamic字节码指令问题

    这篇文章主要介绍了Java中invokedynamic字节码指令问题,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • Eclipse 安装 SVN 在线插件教程

    Eclipse 安装 SVN 在线插件教程

    这篇文章主要介绍了Eclipse 安装 SVN 在线插件教程的相关资料,这里对安装步骤进行了详细介绍,需要的朋友可以参考下
    2016-11-11
  • JAVA使用ffmepg处理视频的方法(压缩,分片,合并)

    JAVA使用ffmepg处理视频的方法(压缩,分片,合并)

    这篇文章主要介绍了JAVA使用ffmepg处理视频的方法,包括视频压缩分片合并功能,通过实例代码讲解的很详细,对java ffmepg处理视频相关知识感兴趣的朋友一起看看吧
    2021-05-05
  • SpringBoot服务开启后通过端口访问无反应的解决

    SpringBoot服务开启后通过端口访问无反应的解决

    这篇文章主要介绍了SpringBoot服务开启后通过端口访问无反应的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • java并发编程死锁定义及如何避免死锁

    java并发编程死锁定义及如何避免死锁

    这篇文章主要为大家介绍了java并发编程中死锁的详细说明及如何避免死锁的方法,有需要的朋友可以借鉴参考下希望能够有所帮助,祝大家多多进步
    2022-02-02
  • java程序中指定某个浏览器打开的实现方法

    java程序中指定某个浏览器打开的实现方法

    最近工作中遇到一个需求,是要利用java打开指定浏览器,整理后发现有四种解决的方法,所以想着分享出来,下面这篇文章主要给大家介绍了java程序中指定某个浏览器打开的实现方法,,需要的朋友可以参考下。
    2017-03-03

最新评论