实现vue项目和springboot项目前后端数据交互

这篇具有很好参考价值的文章主要介绍了实现vue项目和springboot项目前后端数据交互。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、安装node.js

  • 太高版本的win7不支持
    这里安装node-v12.16.2-x64.msi,指定安装位置后直接按下一步就可以。
  • npm是node内置的工具
    这里配置npm的镜像cnpm(提高下载速度,以后用到npm的命令都可以用cnpm命令替换)不指定cnpm版本使用如下命令会报错:
npm install -g cnpm --registry=https://registry.npm.taobao.org
  • 错误信息:
npm WARN notsup Unsupported engine for npm-normalize-package-bin@3.0.1: wanted:{"node":"^14.17.0 || ^16.13.0 || >=18.0.0"} (current: {"node":"12.16.2","npm":"6.14.4"})
npm WARN notsup Not compatible with your version of node/npm: npm-normalize-package-bin@3.0.1
  • 检查错误,参照网上的对应版本图,node12要用cnpm 6版本,输入如下命令:
npm install -g cnpm@6 --registry=https://registry.npm.taobao.org

springboot和vue前后端交互,# 前端,node.js,vue.js,spring boot

  • 查看node和npm版本
node -v
npm -v

2、安装vue-cli脚手架

  • vue-cli是在node基础上构建的工具,而vue-cli又可以快速搭建含vue功能的模块(即模块化开发)。安装vue-cli 3.x脚手架命令如下:
cnpm install @vue/cli -g
  • 查看版本
vue -V

3、创建vue项目

vue-cli脚手架创建的是模块化项目,使用模块化开发(.vue后缀的文件为单文件组件,一个文件里封装了html、js、css代码)。项目属于单页面应用(SPA),通过路由跳转链接,不利于SEO(爬虫抓取不到内容),可以用Nuxt框架解决该问题(这是后话)。所以说vue比较适合做后台管理系统。但前端分离的插拔特性,可以让它方便地切换为移动端浏览器、app或小程序。

  • 这里有两种方法创建,第一种是用命令(会在当前文件夹下创建文件夹):
vue create 项目名 
  • 第二种用UI可视化界面创建:
vue ui

启动vue可视化工具,会在浏览器中打开,创建过项目的需要返回主页:
springboot和vue前后端交互,# 前端,node.js,vue.js,spring boot
springboot和vue前后端交互,# 前端,node.js,vue.js,spring boot
springboot和vue前后端交互,# 前端,node.js,vue.js,spring boot
选手动配置
springboot和vue前后端交互,# 前端,node.js,vue.js,spring boot
springboot和vue前后端交互,# 前端,node.js,vue.js,spring boot
springboot和vue前后端交互,# 前端,node.js,vue.js,spring boot
点创建即可。
springboot和vue前后端交互,# 前端,node.js,vue.js,spring boot
这里不保存预设。
springboot和vue前后端交互,# 前端,node.js,vue.js,spring boot
等待安装完,来到欢迎界面就可以就可以关闭网页了,后期安装其它插件我们可以通过命令行执行,也很方便。

  • 进入项目文件夹下,cmd执行命令启动项目
cd 项目文件夹名
npm run serve

运行后,显示如下,在浏览器中输入其中一个地址即可看到欢迎界面,说明vue项目成功跑起来了。
springboot和vue前后端交互,# 前端,node.js,vue.js,spring boot
springboot和vue前后端交互,# 前端,node.js,vue.js,spring boot

4、数据交互的准备工作

这里默认你已经懂得vue编码的一些基础知识,由于缩减篇幅,所以在此只会贴上关键代码。

前后端分离的项目,要进行数据交互,我们使用的是异步请求工具,JS使用的是Ajax,而vue使用的是axios

  • 安装axios插件:
cnpm install axios -S
cnpm i vue-axios -S

5、前后端数据交互之前端

前后端人员协商会有接口文档,我们以登录和注册为例:
springboot和vue前后端交互,# 前端,node.js,vue.js,spring boot

  • 登录请求
//发送get请求 查询用户(用post更安全,这里只是举例使用方法)
						this.axios.get("http://localhost:80/api/user/login",{
							params:{
								"username":username,
								"password":password
							}
						}).then(resp => { //数据传输成功
							//用户名密码正确
							if(resp.data.data_status === 0){
							//路由跳转
								router.push("/")
							}
							else{
							//显示失败消息,可能是用户名或密码错误
								ElMessage({
									message:resp.data.data.message,
									duration:1000,
									type:"error"
								})
							}							
						}).catch(error => { //数据传输失败
							console.log(error)
						})
  • 注册
//访问后台保存用户(注册)
					  this.axios.post("http://localhost:80/api/user/register",{
						  "username":username,
						  "email":email,
						  "password":password
					  }).then(function(response){
						  //发送成功,接受返回注册状态信息
						  if(response.data.data_status === 0){
							  //注册成功,路由跳转							
							  router.push("/login")
						  }
						  else{
						  	//显示注册失败,用户已存在
							  ElMessage({
							  	message:response.data.data.message,
							  	duration:1000,
							  	type:"error"
							  })
						  }
					  }).catch(function(response){
						  alert("数据传输失败")
					  })
  • 注意,这里的data_status、data.message是由后端返回的数据决定的,名称要与后端设定的返回值一致,可以先用console.log(response)查看一下返回的数据。

6、前后端数据交互之后端

  • GET提交:请求的数据会附在URL之后,在地址栏显示出来;POST提交:把提交的数据放置在是 HTTP 包的包体(请求体)中。地址栏不会改变。
  • 后端Get不要在参数加@RequestBody,因为请求是在url里中传参
    Post要在参数加@RequestBody,因为是在请求体中取值
  • 后端登录
	//后端登录
	@GetMapping("/api/user/login")
	@ResponseBody//使用ajax时必须加,会把返回类转化为json  Get不要加@RequestBody,是在url里中传参
	public CommonResult<Message> loginVue(User user){
		
		//注册用户逻辑
		int data_status = userService.loginVue(user);
		if (data_status == 0) {
			return CommonResult.success(Message.createMessage("注册成功"));
		} 
		//实际开发中的状态码举例:   10001 用户已存在  10002 用户名或密码错误  20001 商品已存在 。。。
		else if(data_status == 2){
			return CommonResult.failed(data_status, Message.createMessage("用户名或密码错误!!!"));
		}
		else {
			return null;
		}
		
	}
  • 后端注册
	@PostMapping("/api/user/register")
	@ResponseBody//使用ajax时必须加,会把返回类转化为json  Post要加@RequestBody,是在请求体中取值
	public CommonResult<Message> registerVue(@RequestBody User user){
		
		//System.out.println(username);
//		System.out.println(user);
		//注册用户逻辑
		int data_status = userService.registerVue(user);
		if (data_status == 0) {
			return CommonResult.success(Message.createMessage("注册成功"));			
		} else {
			return CommonResult.failed(data_status, Message.createMessage("用户名或邮箱已存在,请更改信息!!!"));
		}
		
	}

Get请求不要在参数前加@RequestBody,Post请求要在参数前加@RequestBody。重要的事情说三遍!!!

这样就可以直接使用User user参数来接受值

  • 后端登录还是注册都会有返回值,类名可以自定义,但类里的属性名称定义要和接口文档一致,这样前端接收到对应的值。这里我们定义了一个泛型的CommonResult<Message>。
package com.zzz.login_demo.utils;

public class CommonResult<T> {

	private Integer data_status;
	private T data;
	
	protected CommonResult() {
	}
	
	protected CommonResult(int data_status, T data){
		this.data_status = data_status;
		this.data = data;
	}
	
	//返回成功(不带data信息)
	public static CommonResult<Object> success() {
		return new CommonResult<Object>(0, null);
	}
	//返回成功(带data信息)
	public static <T> CommonResult<T> success(T data) {
		return new CommonResult<T>(0, data);
	}
	//返回失败(带data信息)
	public static <T> CommonResult<T> failed(int data_status, T data) {
		return new CommonResult<T>(data_status, data);
	}

	//get/set...
}
package com.zzz.login_demo.utils;

public class Message {
	
	private String message;

	protected Message() {
	}
	
	public Message(String message) {
		super();
		this.message = message;
	}
	
	public static Message createMessage(String message) {
		return new Message(message);
	}

	//get/set...

}
  • 测试前后端数据交互时报错:Access-Control-Allow-Origin
Access to XMLHttpRequest at 'http://xxx' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

这是跨域请求出错,可以在前端或后端配置跨域请求。
感觉添加后端配置跨域请求比较方便,在每个Controller类的注解@Contoller的下一行添加注解@CrossOrigin即可。

7、扩展

vue项目如何部署到服务器?(Nginx)
前端、后端分开开发时如何模拟用假数据测试?(mockjs、postman)
感兴趣的童靴可以留言给我,我会安排写作。文章来源地址https://www.toymoban.com/news/detail-857491.html

到了这里,关于实现vue项目和springboot项目前后端数据交互的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 后端SpringBoot+前端Vue前后端分离的项目(二)

    前言:完成一个列表,实现表头的切换,字段的筛选,排序,分页功能。 目录 一、数据库表的设计 二、后端实现 环境配置 model层  mapper层 service层  service层单元测试 controller层 三、前端实现 interface接口 接口api层 主要代码 效果展示 引入mybatis-plus依赖 MerchandiseDetailsService文

    2024年02月09日
    浏览(35)
  • 后端SpringBoot+前端Vue前后端分离的项目(一)

    前言:后端使用SpringBoot框架,前端使用Vue框架,做一个前后端分离的小项目,需求:实现一个表格,具备新增、删除、修改的功能。 目录 一、数据库表的设计 二、后端实现 环境配置 数据处理-增删改查 model层 mapper层 XML配置 Service层 controller层 单元测试 三、前后端交互 配置

    2024年02月10日
    浏览(46)
  • 在前后端分离的项目中,Springboot vue,前端把json传到后端,后端用一个类接收,json中的数据是怎么转换类型的

    在前后端分离的项目中,前端通常会将数据以 JSON 格式传输给后端,后端需要将接收到的 JSON 数据转换为对应的类型。这个过程可以通过后端框架和库来自动完成。 在Spring Boot中,后端可以使用相关的库来实现JSON数据的转换。常见的库包括Jackson、Gson和FastJson等。这些库提供

    2024年02月13日
    浏览(47)
  • 【SpringBoot+Vue】全网最简单但实用的前后端分离项目实战笔记 - 前端

    配套视频地址:https://www.bilibili.com/video/BV1dG4y1T7yp/ 如果您需要原版笔记,请up喝口水,可以上我的淘宝小店 青菜开发资料 购买,或点击下方链接直接购买: 源码+PDF版本笔记 源码+原始MD版本笔记 感谢支持! 官网:https://nodejs.org 注意,node可以比我稍低,但不要更高 https://p

    2024年01月17日
    浏览(32)
  • SpringBoot + Vue前后端分离项目实战 || 三:Spring Boot后端与Vue前端连接

    系列文章: SpringBoot + Vue前后端分离项目实战 || 一:Vue前端设计 SpringBoot + Vue前后端分离项目实战 || 二:Spring Boot后端与数据库连接 SpringBoot + Vue前后端分离项目实战 || 三:Spring Boot后端与Vue前端连接 SpringBoot + Vue前后端分离项目实战 || 四:用户管理功能实现 SpringBoot + Vue前后

    2024年02月12日
    浏览(55)
  • (九)axios前后端跨域数据交互--基于SpringBoot+MySQL+Vue+ElementUI+Mybatis前后端分离面向小白管理系统搭建

    在任务六中我们讲过,前后端跨域数据交互,有两种方式可以解决跨域请求,任务六我们使用了CorsConfig类配置跨域。本次任务,我们使用一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中的axios,实现前后端跨域数据交互。通过本次任务,大家能够: (1)掌握axios的使用

    2024年02月15日
    浏览(25)
  • Vue加SpringBoot实现项目前后端分离

    首先需要搭建一个Vue的脚手架项目(已经放在gitee里面了,下面是gitee网址,可以直接拉) (vue-web: 这个是Vue项目模板,没有后台数据) 那么接下来就是实现前后端分离的步骤 首先我们需要有一个登录页面 登录的点击事件利用axios提交到后台去,代码放在后面(没有样式也可以

    2024年02月06日
    浏览(43)
  • Vue+Springboot前后端完整使用国密算法SM2双公私钥对数据加密传输交互完整解决方案

    Vue+Springboot 前后端完整使⽤国密算法SM2双公私钥对数据加密传输交互完整解决⽅案项⽬,特别是企事业单位的项⽬,第三方测试公司做安全测试时,常常要求使用国密算法,因涉及服务端和客户端的交互,传递关键数据时要求使用SM2非对称加密。 引入相关依赖 这里我使用的

    2024年01月23日
    浏览(37)
  • SpringBoot + Vue前后端分离项目实战 || 四:用户管理功能实现

    系列文章: SpringBoot + Vue前后端分离项目实战 || 一:Vue前端设计 SpringBoot + Vue前后端分离项目实战 || 二:Spring Boot后端与数据库连接 SpringBoot + Vue前后端分离项目实战 || 三:Spring Boot后端与Vue前端连接 SpringBoot + Vue前后端分离项目实战 || 四:用户管理功能实现 SpringBoot + Vue前后

    2024年02月11日
    浏览(49)
  • SpringBoot +Vue3 简单的前后端交互

    前端:Vue3 创建项目: npm create vue@latest cd your-project-name npm install npm run dev 项目结构图如下: 1、查看入口文件内容:main.js 代码如下: 在main.js中,首先引入了Vue组件和APP根组件 2、APP跟组件代码如下: 3、路由文件配置:router/index.js 代码如下: 4、Axios请求公共方法:utils/ax

    2024年02月10日
    浏览(27)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包