当前位置:首页 > 技术 > 正文内容

Vue 结合 Spring Boot 实现首次全栈连接的详细教程

访客 技术 2

搭建前端项目总能带来不少乐趣,开发后端服务则让人觉得充满掌控力,但将二者打通连接的过程,却常常让人摸不着头脑。

我初次尝试将 Vue 与 Spring Boot 整合时,本以为能顺利跑通,却接连遇到接口无响应、CORS 跨域错误以及数据流转不清晰等问题。本文将以新手友好的方式,一步步带你完成 Vue 应用与 Spring Boot 后端的对接。

技术栈说明

  • 前端:基于 Vite 的 Vue 框架
  • 后端:Spring Boot
  • 通信方式:RESTful API

步骤1:创建 Spring Boot 后端服务

先搭建一个简易的 RESTful 接口服务:

@RestController
@RequestMapping("/api/v1")
public class GreetingController {

    @GetMapping("/greeting")
    public String getGreeting() {
        return "您好,来自 Spring Boot!";
    }
}

启动 Spring Boot 应用后,访问地址 http://localhost:8080/api/v1/greeting,浏览器将显示返回的文本内容:您好,来自 Spring Boot!

步骤2:创建 Vue 前端项目

使用 Vite 快速初始化 Vue 项目:

  1. 执行命令 npm create vite@latest
  2. 进入项目目录:cd 你的项目名称
  3. 安装依赖:npm install
  4. 启动开发服务:npm run dev

项目启动后将运行在 http://localhost:5173

步骤3:实现 Vue 与后端的接口调用

在 Vue 组件中调用后端接口,我们使用 <script setup> 语法简化代码:

<template>
  <h1>{{ greetingText }}</h1>
</template>

<script setup>
import { ref, onMounted } from 'vue'

const greetingText = ref('')

onMounted(async () => {
  try {
    const response = await fetch('http://localhost:8080/api/v1/greeting')
    greetingText.value = await response.text()
  } catch (error) {
    console.error('获取后端数据失败:', error)
  }
})
</script>

该代码会在组件挂载完成后,向后端发起请求并将返回的文本渲染到页面上。

步骤4:修复 CORS 跨域错误

直接运行项目大概率会遇到 CORS 错误,这是因为 Vue 开发服务运行在 localhost:5173,而 Spring Boot 服务运行在 localhost:8080,不同源的请求会被浏览器的同源策略拦截。

在 Spring Boot 的控制器类上添加 @CrossOrigin 注解,指定允许的前端源即可修复问题:

@CrossOrigin(origins = "http://localhost:5173")
@RestController
@RequestMapping("/api/v1")
public class GreetingController {

    @GetMapping("/greeting")
    public String getGreeting() {
        return "您好,来自 Spring Boot!";
    }
}

刷新 Vue 开发页面后,就能正常显示后端返回的内容了。

最终效果

配置完成后,Vue 应用将显示:您好,来自 Spring Boot!

实践总结

  • 前后端不会自动连通,RESTful API 是二者之间的通信桥梁
  • CORS 并非程序漏洞,而是浏览器的安全防护机制
  • 从简易示例入手,能更清晰地理解完整的数据流转流程

核心经验

  1. 使用 RESTful API 作为前后端通信的标准方式
  2. 本地开发环境中务必处理跨域请求问题
  3. 集成前后端前,先单独测试后端接口的可用性
  4. 先从简单功能开始开发,再逐步构建复杂业务逻辑

后续拓展

掌握该基础对接流程后,可以尝试开发以下小型项目加深理解:

  • 简易登录系统
  • 待办事项管理应用
  • 个人用户仪表盘

"清晰的认知胜过复杂的代码,干净的集成往往源于扎实的理解。"

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。